通过迭代使用Groovy每个XML节点,打印每个节点

通过迭代使用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 ...我开始怀疑,经过几天的浑浑噩噩,几乎没有任何地方)

谢谢和问候

+1

天?你看过Groovy XML的例子吗?收集哪些*节点并将它们放入地图?很难理解你想要做什么。 – 2013-02-25 22:31:27

你继续得到内部节点的原因是因为你错误地遍历外部列表两次。内循环迭代应该只在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 
+0

谢谢!我并不了解第一个迭代器的名字(如'{thing - >')必须完全匹配......这就是为什么我要完整路径并抓住所有东西两次。 – user2109043 2013-02-26 17:22:13

+0

@ user2109043闭包参数是集合中的每个对象,这里是外部标签。 – 2013-02-26 17:25:05