2016-07-04 3 views
0

私はsoapuiで自動テストを作成しています。新しいgroupingNodesをxmlの異なる位置に追加すると何が起きるかチェックする必要があります。GroovyとSOAPUIのXmlSlurper - xmlのランダムな場所に新しい要素を追加する

Iはこれに類似したXML構造を有する:私はどのノードがどこに追加するには、いくつかの異なる組み合わせを定義したデータソースの

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

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

そして追加する新しい要素を1つのテストケース内の新しいノードをrootNodeに追加する必要があります.3番目のテストケースでは、2番目のテストケースではidNode = 3のgroupNodeに追加し、新しく作成したノードはrootNodeに追加します。そうです。

私の質問は、どうやって新しいgroupingNode要素をxmlのランダムな位置にプログラムで追加できるかということです。

+0

あなたのxmlは正しいものですか? 'groupingNode'が別のグループに含まれていますか?ご確認ください。 – Rao

+0

ところで、あなたは* 1回*と* 2回*を意味しますか? – Rao

+0

はい、すべてのテストケースでgroupingNodesの数が異なるので、 'rootNode.groupingNode.appendNode(xx)'のようなことができないので、xmlは正しいです。 2番目のコメントについては、私は質問を更新しました。 – exemplum

答えて

0

私は最初に彼の名前で親groupingNodeを見つけるために最初に深さで試しました。

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

ただし、すべてのノードが見つかりませんでした。後で私はこのコードで古いノードを見つけることができますが、新しいノードは見つけられないことを発見しました。そして、いくつかの研究の後、私はこれがXmlSlurperに問題があることが判明し、私は新しいノードが見えるようにしたい場合は、私は新しいノード私が行うために必要なすべてを作成した後、再び4.1 Adding nodes XMLを評価する必要がある:

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

この後、私はすべてのgroupingNodesを最初に見つけ出すことができました。

関連する問題