Groovy итерации узлов с XMLHolder - PullRequest
       25

Groovy итерации узлов с XMLHolder

4 голосов
/ 29 сентября 2011

Я хочу перебирать узлы XML-файла с помощью держателя XML.

def reader = groovyUtils.getXmlHolder(test1 );

скажем, XML выглядит следующим образом:

<xml>
   <node>
      <val1/>
      <val2/>
   </node1>
   <node>
      <val1/>
      <val2/>
   </node2>
</xml>

Я хочу прочитать значения из разных узлов. (val1, val2). И я попробовал вот так:

for( node in reader.getNodeValues( "//ns1:node" ))
{}

Он действительно перебирает узлы, но я не знаю, как получить доступ к значениям внутри них.

Большое спасибо за вашу помощь!

джон

1 Ответ

7 голосов
/ 29 сентября 2011

Вместо getNodeValues вы, вероятно, хотите вместо этого позвонить getDomNodes. Это вернет вам стандартные узлы Java DOM класса org.w3c.dom.Node. Оттуда вы можете проходить дочерние узлы, начиная с getFirstChild и итерируя с getNextSibling. Groovy DOMCategory добавляет несколько удобных вспомогательных методов, которые делают его гораздо менее болезненным.

Например:

use (groovy.xml.dom.DOMCategory) {
    for( node in reader.getDomNodes( "//ns1:node" )) {
        node.children().each { child ->
            println child
        }
    }
}
...