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

XmlSlurper in Groovy and SOAPUI - Add new element to random location in xml

我正在使用 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 中的随机位置。

我首先尝试深度优先,通过他的名字找到父 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 )

在此之后我能够找到所有深度优先的分组节点。