2016-07-04 3 views
0

Я создаю автоматические тесты с помощью soapui, и мне нужно проверить, что происходит, когда я добавляю новые groupingNodes в разные позиции в xml.XmlSlurper в Groovy и SOAPUI - Добавить новый элемент в случайное местоположение в xml

У меня есть структуру 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 во втором тестовом случае для groupNode с id = 3, в третьем тестовом случае к вновь созданному узлу, который добавляется в rootNode и скоро.

Так что мой вопрос в том, как я могу программно добавить новый элемент groupNode в случайную позицию в xml.

+0

Является ли ваш xml правильным, поскольку один 'groupingNode' включен/вставлен в другой? Пожалуйста подтвердите. – Rao

+0

Кстати, что вы подразумеваете под * однократно * и * во второй раз *? – Rao

+0

Да, xml правильный, и это проблема, потому что я не могу сделать что-то вроде 'rootNode.groupingNode.appendNode (xx)', поскольку в каждом тестовом случае у меня разное количество groupingNodes. Для второго комментария я обновил вопрос. – exemplum

ответ

0

Сначала я попытался с глубиной сначала найти родительскую группуNode через свое имя.

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) 

и после этого я смог сначала найти все группировкиNodes с глубиной.