我正在使用groovy脚本来解析使用SoapUI的API调用的响应。
我得到的回应按照确切的顺序有以下要素 -
<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元素并将它们存储在一个文件中。为此,我使用名为 holder 的XML持有者对象,并使用代码 holder.getNodeValue(“// *:BidAdjustment”)。
但是,这只是返回第一个值(即计算机为2)。我怎么得到其他的?所有的名字都是一样的,因此我不能用不同的名字来引用它们。帮助将不胜感激:) :)谢谢:))
答案 0 :(得分: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'
}