的名字在Groovy访问XML的子节点,同时访问父节点反复

问题描述:

我有一个这样的XML:的名字在Groovy访问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> 

我想通过每一个节点,如果状态的值是1,使用名称1迭代和如果它是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脚本。我见过相关的帖子,但他们只遍历子节点,我不想做,因为我的父节点有很多子节点,我有很多父节点要经历。任何帮助,将不胜感激。

你可以这样来做:

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 
+0

这帮助,非常感谢! – dhishkaow 2012-07-09 16:05:54