8

我有一个非常简单(我认为)这样的 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>

我面临的问题是,我不能简单地用这段代码分别访问每个节点......它正在打印所有的东西,而我真正想做的是将每个节点收集到一个地图中,然后询问/transform 地图中的一些键/值对并替换它们(我知道,在路上,我知道..)

这是我可怕的代码......有人可以让我朝着正确的方向前进吗?

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 ......在闲逛了几天并且基本上无处可去之后,我开始怀疑)

谢谢并恭祝安康

4

1 回答 1

15

您不断获取内部节点的原因是因为您错误地迭代了外部列表两次。内部循环应该只迭代tag

doc = new XmlSlurper().parse("things.xml")
doc.thing.each { thing ->
  println "thing index: ${thing.@indexNum}"
  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
于 2013-02-25T22:56:55.147 回答