在Groovy中按名称访问xml的子节点,同时迭代访问父节点

时间:2012-07-09 14:09:15

标签: xml groovy soapui

我有这样的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脚本。我已经看过相关的帖子,但他们只遍历子节点,我不想这样做,因为我的父节点有很多子节点,而且我有很多父节点要经过。任何帮助,将不胜感激。

1 个答案:

答案 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