通过迭代使用Groovy每个XML节点,打印每个节点
我有这样一个非常简单的(我认为)的XML文件...通过迭代使用Groovy每个XML节点,打印每个节点
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Things>
<thing indexNum='1'>
<a>123</a>
<b>456</b>
<c>789</c>
</thing>
<thing indexNum='2'>
<a>123</a>
<b>456</b>
<c>789</c>
</thing>
</Things>
我面临的问题是,我不能简单地得到在每个节点都与这个代码分开......它打印所有的东西,而我真正试图做的是将每个节点收集到一张地图中,然后询问/转换地图中的某些键/值对并替换它们(我知道..)
这是我可怕的代码...有人可以让我在正确的方向吗?
def counter = 0
Things.thing.each { tag ->
counter++
println "\n-------------------------------- $counter ------------------------------------"
Things.thing.children().each { tags ->
println "$counter${tags.name()}: $tags"
return counter
}
println "\n$counter things processed...\n"
}
在地图内部操纵它会更容易吗? (我首先用一张地图生成了这个xml,认为会有一些简单的方法来处理XML ...我开始怀疑,经过几天的浑浑噩噩,几乎没有任何地方)
谢谢和问候
你继续得到内部节点的原因是因为你错误地遍历外部列表两次。内循环迭代应该只在tag
:
doc = new XmlSlurper().parse("things.xml")
doc.thing.each { thing ->
println "thing index: ${[email protected]}"
thing.children().each { tag ->
println " ${tag.name()}: ${tag.text()}"
}
}
输出:
thing index: 1
a: 123
b: 456
c: 789
thing index: 2
a: 123
b: 456
c: 789
谢谢!我并不了解第一个迭代器的名字(如'{thing - >')必须完全匹配......这就是为什么我要完整路径并抓住所有东西两次。 – user2109043 2013-02-26 17:22:13
@ user2109043闭包参数是集合中的每个对象,这里是外部标签。 – 2013-02-26 17:25:05
天?你看过Groovy XML的例子吗?收集哪些*节点并将它们放入地图?很难理解你想要做什么。 – 2013-02-25 22:31:27