Manipularea namespace în Groovys XmlSlurper

voturi
38

Situatia:

def str = 
  <foo xmlns:weird=http://localhost/>
    <bar>sudo </bar>
    <weird:bar>make me a sandwich!</weird:bar>
  </foo>

def xml = new XmlSlurper().parseText(str)
println xml.bar

Rezultatul acestui fragment este

# sudo make me a sandwich!

Se pare ca parserul îmbină conținutul <bar>și <weird:bar>.

Este acest comportament dorit și dacă da, cum pot evita acest lucru și selectați numai <bar>sau <weird:bar>?

Întrebat 29/12/2011 la 13:31
de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
17

Prin XMLSlurper implicit nu este spațiul de nume conștient. Acest lucru poate fi activat prin declararea namespace cu declareNamespace metoda .

def str = """ 
<foo xmlns:weird="http://localhost/">
  <bar>sudo </bar>
  <weird:bar>make me a sandwich!</weird:bar>
</foo>
""" 
def xml = new XmlSlurper().parseText(str).declareNamespace('weird':'http://localhost/')
println xml.bar // without namespace awareness, will print "sudo make me a sandwich!"
println xml.':bar' // will only print "sudo"
println xml.'weird:bar' // will only print "make me a sandwich!"

Ieșirea este:

sudo make me a sandwich!
sudo
make me a sandwich!

Primul printlntot nu va fi spațiul de nume conștient. A doua printlnva imprima doar tag - ul fără spațiu de nume. Dacă vă calificați elementul cu prefixul prezentat în al treilea printlnveți obține doar tag - ul namespaced.

Publicat 29/12/2011 la 14:13
sursa de către utilizator

voturi
2

Știu că acest lucru a fost a răspuns la un timp în urmă, dar aici este o alternativă pentru oricine altcineva care se confruntă cu aceeași problemă. XmlSlurperClasa are trei constructori, un cuplu de care vă permit să specificați cum doriți să fie conștienți-spațiu de nume.

public XmlSlurper(boolean validating, boolean namespaceAware)

Declararea slurper prin apelarea new XmlSlurper(false, true). Sper că acest lucru este util altora.

Publicat 24/10/2017 la 16:32
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more