2016-07-12 9 views
0

Ich verwende groovy Skript, um die Antwort eines API-Aufrufs mit SoapUI zu analysieren.SoapUI Reps, Parsing

Die Antwort ich bin immer hat die folgenden Elemente in dem genauen auftrags-

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

Ich mag jede der BidAdjustment und Device Elemente zuzugreifen und sie in einer Datei zu speichern. Dazu benutze ich ein XML-Halterobjekt namens Halter und den Code holder.getNodeValue ("// *: BidAdjustment").

Allerdings gibt dies nur den ersten Wert zurück (d. H. 2 für Computer). Wie bekomme ich die anderen? Alle Namen sind gleich und daher kann ich sie nicht mit anderen Namen bezeichnen. Hilfe wäre sehr dankbar :) :) Danke :)

Antwort

0

Ich denke, Sie verwenden einen Halter aus der com.eviware.soapui.support.GroovyUtils Klasse.

Sie bekommen für das, was Sie fragen, nur einen Knoten. Sie sollten wahrscheinlich stattdessen def nodes = holder.getDomNodes("//*:DeviceOSTargetBid") verwenden.

Dann können Sie über jeden zurückgegebenen Knoten durch den Xpath-Ausdruck iterieren.

AKTUALISIERT

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

Einige nützliche Dokumentation: http://docs.groovy-lang.org/latest/html/gapi/groovy/xml/dom/DOMCategory.html

Oder wenn Sie so, wie Sie die Antwort bekommen ändern möchten, können Sie auf diese Weise versuchen:

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

Könnten Sie bitte den Code teilen, wie Sie über die Elemente in jedem Knoten enthalten und ihren Wert extrahieren? –

+0

Überprüfen Sie die aktualisierte Antwort – exoddus

+0

Nicht passiert bro :(Werfen Sie einen Fehler mit der Angabe "Keine solche Eigenschaft: BidAdjustment für die Klasse: java.lang.String –