Groovy中解析XML,并获得价值
问题描述:
我得到一个XML responde这样的:Groovy中解析XML,并获得价值
xml = grails.converters.XML.parse(new URL('http://...))
的XML如下:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">272</int>
<lst name="params">
<str name="indent">on</str>
<str name="start">0</str>
<str name="q">roger federer</str>
<str name="version">2.2</str>
<str name="rows">10</str>
</lst>
</lst>
<result name="response" numFound="29327" start="0">
<doc>
<str name="id">135350</str>
<int name="revision">723055</int>
<date name="timestamp">2005-08-21T22:34:05Z</date>
<str name="title">Federer</str>
<str name="titleText">Federer</str>
<str name="user">Indech</str>
<str name="userId">3073</str>
</doc>
<doc>...</doc>
...
<doc>...</doc>
</result>
</response>
,我想在这里保存三两件事:
<int name="QTime">272</int>
<str name="q">roger federer</str>
<result name="response" numFound="29327" start="0">
我的输出WUD是:
def one = '272'
def two = 'roger federer'
def three = '29327'
我该怎么做到=?我将不胜感激这方面的一些帮助。优先考虑Groovy而不是Java。
答
这样做可能是一个办法:
xml = grails.converters.XML.parse(new URL('http://...))
def (one, two, three) = xml.depthFirst().findAll {
[email protected] == 'QTime' || [email protected] == 'q' || [email protected] == 'response'
}.with { a, b, c ->
[ a.text(), b.text(), [email protected] ]
}
println one
println two
println three
但它是一个有点依赖于XML为N您展示了findAll
顺序在第二位所需的顺序返回的东西
更直接的做法可能是:
def one = xml.lst.int.find { [email protected] == 'QTime' }.text()
def two = xml.lst.lst.str.find { [email protected] == 'q' }.text()
def three = [email protected]
println one
println two
println three