Может ли общий XML анализироваться так же хорошо, как простой XML в Groovy? - PullRequest
2 голосов
/ 27 июня 2009

Учитывая хорошую простую структуру XML, XmlSlurper () позволяет мне очень легко читать значения из нее.

def xml = "<html><head><title>groovy</title></head></html>"

def html = new XmlSlurper().parseText(xml)

println html.head.title

Есть ли способ сделать эту простую древовидную навигацию возможной для универсального (основанного на типе и т. Д.) XML. В идеале, во фрагменте кода ниже, я хотел бы пройтись по значениям по их атрибуту name , но вместо этого я должен выполнить весь этот поиск:

def genxml = """
<doc>
    <lst name = "head">
        <str name = "title">groovy</str>
        <str name = "keywords">java xml</str>
    </lst>
</doc>"""

def doc = new XmlSlurper().parseText(genxml)
println doc.lst.find { it.@name == "head" }.str.find { it.@name == "title" }

Есть ли способ пройти это так же, как:

println doc.head.title

1 Ответ

0 голосов
/ 27 июня 2009

заголовок и заголовок являются атрибутами.

Есть некоторые действительно тонкие различия между slurper и парсером: http://www.ibm.com/developerworks/java/library/j-pg05199/

Вы можете сделать это:

println "${doc.lst.str[0]} ${doc.lst.str[0].@name}"
println doc.lst.str.each { 
    println "${it} ${it.@name}"
    }

но посмотрите на вывод:

groovy title
groovy title
java xml keywords
groovyjava xml
...