我有这样的XML:
<Envelope>
<Node>
<Status>1</Status>
<Name1>John</Name1>
<Name2>Smith</Name2>
</Node>
<Node>
<Status>2</Status>
<Name1>Jane</Name1>
<Name2>Doe</Name2>
</Node>
</Envelope>
我想遍历每个节点,如果Status的值为1,则使用Name1,如果是2,则使用Name2。
Envelope = holder.getNodeValues("//ns2:NonProvisionedServers")
for(node in Envelope)
if(node.Status == 1)
{
assert node.Name1 == "SomeFirstName"
}
if(node.Status == 2)
{
assert node.Name2 == "SomeLastName"
}
之前我做过最小的Groovy脚本。我已经看过相关的帖子,但他们只遍历子节点,我不想这样做,因为我的父节点有很多子节点,而且我有很多父节点要经过。任何帮助,将不胜感激。
答案 0 :(得分:5)
你可以这样做:
def inx = '''<Envelope>
| <Node>
| <Status>1</Status>
| <Name1>John</Name1>
| <Name2>Smith</Name2>
| </Node>
| <Node>
| <Status>2</Status>
| <Name1>Jane</Name1>
| <Name2>Doe</Name2>
| </Node>
|</Envelope>'''.stripMargin()
// Parse the XML
def xml = new XmlSlurper().parseText( inx )
// For every <Node> element in the XML
xml.Node.each { node ->
// Print the child of the node called "Name" + Status
println node."Name${node.Status}"
}
打印:
John
Doe