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

dhi*_*aow 2 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>
Run Code Online (Sandbox Code Playgroud)

我想遍历每个节点,如果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"
}
Run Code Online (Sandbox Code Playgroud)

我以前做过最小的Groovy脚本.我已经看过相关的帖子,但他们只遍历子节点,我不想这样做,因为我的父节点有很多子节点,而且我有很多父节点要经过.任何帮助,将不胜感激.

tim*_*tes 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}"
}
Run Code Online (Sandbox Code Playgroud)

打印:

John
Doe
Run Code Online (Sandbox Code Playgroud)