Groovy和SOAPUI中的XmlSlurper - 将新元素添加到xml中的随机位置

时间:2016-07-04 13:13:02

标签: groovy soapui xmlslurper

我正在使用soapui创建自动化测试,我需要检查当我在xml中的不同位置添加新的groupingNodes时会发生什么。

我的xml结构类似于:

<rootNode>
<groupingNode>
    <id>1</id>
    <name>Node 1</name>
    <groupingNode>
        <id>2</id>
        <name>Node 2</name>
        <groupingNode>
            <id>3</id>
            <name>Node 3</name>
        </groupingNode>
    </groupingNode>
</groupingNode>
<groupingNode>
    <id>4</id>
    <name>Node 4</name>
</groupingNode>

要添加的新元素:

<groupingNode>
    <id>5</id>
    <name>Node 5</name>
</groupingNode>

在数据源中我定义了几个不同的组合节点和添加位置,因此需要将一个测试用例中的新节点添加到rootNode,在第二个测试用例中添加到id = 3的groupNode,在第三个测试用例中添加到新创建的添加到rootNode的节点,依此类推。

所以我的问题是如何以编程方式将新的groupingNode元素添加到xml中的随机位置。

1 个答案:

答案 0 :(得分:0)

我首先尝试深度,首先通过他的名字找到父groupingNode。

xml.'**'.find{groupingNode-> groupingNode.name.text() == parentNode}.appendNode( fragmentToAdd )

但由于我找不到所有节点,因此无效。后来我发现用这个代码我可以找到旧节点,但不能找到新节点。然后经过一些研究后我发现这是XmlSlurper的问题,如果我希望新节点可见,我需要再次评估xml 4.1 Adding nodes所以在创建新节点之后我需要做的就是:

def newXML = new StreamingMarkupBuilder().bind { mkp.yield xml}.toString()
xml= new XmlSlurper( false, true ).parseText( newXML )

之后我能够找到所有深度优先的groupingNodes。