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>

私が直面している問題は、このコードを使用して各ノードを個別に取得できないことです...すべてのものを出力しています。私が実際にやろうとしているのは、各ノードをマップに集めてから質問することです/マップ内のいくつかのキーと値のペアを変換し、それらを置き換えます(道のりを下って、私は知っています..)

これが私の恐ろしいコードです...誰かが私を正しい方向に向けることができますか?

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

The reason you keep getting the inner nodes is because you incorrectly iterate over the outer list twice. The inner loop should iterate only over 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()}"
  }
}

Output:

thing index: 1
  a: 123
  b: 456
  c: 789
thing index: 2
  a: 123
  b: 456
  c: 789
于 2013-02-25T22:56:55.147 に答える