Groovys XmlSlurper içinde ad alanı elleçleme

oy
38

Durum:

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

Bu pasajı çıktısıdır

# sudo make me a sandwich!

Ayrıştırıcı içeriğini birleştirir gibi görünüyor <bar>ve <weird:bar>.

Bu davranış isteniyorsa ve evet eğer, bunu nasıl önlemek ve sadece seçebilir <bar>ya <weird:bar>?

Oluştur 29/12/2011 saat 13:31
kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
17

Varsayılan XMLSlurper By farkında ad alanı değildir. Bu ad alanlarına ilan ederek açılabilir declareNamespace Yöntem .

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!"

çıktısı:

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

İlk printlnirade hala ad farkında olmayabilir. İkinci printlnyalnızca ad vermeden etiketi yazdırılır. Eğer üçte gösterilen ön ekiyle eleman nitelikte ise printlnsadece isim alanlı etiketi olsun.

Cevap 29/12/2011 saat 14:13
kaynak kullanıcı

oy
2

Bunun bir süre önce cevap verilmiştir biliyorum ama burada aynı sorunla karşı karşıya başkası için bir alternatiftir. XmlSlurperSınıf üç inşaatçı, sahip olduğu birkaç Eğer o ad-haberdar olmak istiyorum belirtmek için izin verir.

public XmlSlurper(boolean validating, boolean namespaceAware)

Arayarak Slurper beyan new XmlSlurper(false, true). Bu başkalarına yararlı olacağını umuyoruz.

Cevap 24/10/2017 saat 16:32
kaynak kullanıcı

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