2016-07-12 1 views
0

Я использую groovy-скрипт для анализа ответа API-вызова с помощью SoapUI.Разбор синтаксиса SoapUI

Ответ я получаю есть в точном ПОРЯДКА

<DeviceOS> 
<Bids> 
<DeviceOSTargetBid> 
<BidAdjustment>2</BidAdjustment> 
<DeviceName>Computers</DeviceName> 
</DeviceOSTargetBid> 

<DeviceOSTargetBid> 
<BidAdjustment>32</BidAdjustment> 
<DeviceName>Smartphones</DeviceName> 
</DeviceOSTargetBid> 

<DeviceOSTargetBid> 
<BidAdjustment>0</BidAdjustment> 
<DeviceName>Tablets</DeviceName> 
</DeviceOSTargetBid> 

</Bids> 
</DeviceOS> 

следующие элементы, которые я хочу, чтобы получить доступ к каждому из элементов BidAdjustment и DEVICENAME и хранить их в файле. Для этого я использую объект владельца XML под названием держатель и используя код holder.getNodeValue ("// *: BidAdjustment").

Однако это просто возвращает первое значение (например, для компьютеров). Как я могу получить другие? Все имена одинаковы, поэтому я не могу ссылаться на них разными именами. С благодарностью будем благодарны :) :) Спасибо :)

ответ

0

Я думаю, вы используете держатель от класса com.eviware.soapui.support.GroovyUtils.

Вы получаете то, о чем просите, всего один узел. Вместо этого вы должны использовать def nodes = holder.getDomNodes("//*:DeviceOSTargetBid").

Затем вы можете перебирать каждый возвращаемый узел по выражению xpath.

ОБНОВЛЕНО

def items = holder.getNodeValues("//*:DeviceOSTargetBid") 
for (node in items) {  
    node.BidAdjustment.text(); 
    node.DeviceName.text();  
} 

Некоторая полезная документация: http://docs.groovy-lang.org/latest/html/gapi/groovy/xml/dom/DOMCategory.html

Или, если вы предпочитаете, чтобы изменить способ получить ответ, вы можете попробовать этот способ:

def rootNode = new XmlSlurper().parseText(
    '''<DeviceOS> 
<Bids> 
<DeviceOSTargetBid> 
<BidAdjustment>2</BidAdjustment> 
<DeviceName>Computers</DeviceName> 
</DeviceOSTargetBid> 

<DeviceOSTargetBid> 
<BidAdjustment>32</BidAdjustment> 
<DeviceName>Smartphones</DeviceName> 
</DeviceOSTargetBid> 

<DeviceOSTargetBid> 
<BidAdjustment>0</BidAdjustment> 
<DeviceName>Tablets</DeviceName> 
</DeviceOSTargetBid> 

</Bids> 
</DeviceOS>''') 

def f = new File('C:/yourFileName.txt') 
rootNode.Bids.DeviceOSTargetBid.each(){ s -> 
    f << "${s.DeviceName.text()} ${s.BidAdjustment.text()}" + '\n' 
} 
+0

Не могли бы вы рассказать о том, как перебирать элементы, содержащиеся в каждом узле, и извлекают их значение? –

+0

проверить обновленный ответ – exoddus

+0

Не происходит bro :(бросает сообщение об ошибке «Нет такого свойства: BidAdjustment для класса: java.lang.String –

Смежные вопросы