使用Groovy基于前面的节点属性复制属性值

使用Groovy基于前面的节点属性复制属性值,groovy,soapui,Groovy,Soapui,我试图用Groovy在SoapUi中做一些事情,但它不起作用 我有多个具有许多属性的节点,需要根据父节点的属性提取子节点属性 例如: <library id="82389389"> <book id="123" bookType="SF"> <price id="325" priceValue="5"/> </book> <book id="4741" bookType="History">

我试图用Groovy在SoapUi中做一些事情,但它不起作用

我有多个具有许多属性的节点,需要根据父节点的属性提取子节点属性

例如:

<library id="82389389">
    <book id="123" bookType="SF">
        <price id="325" priceValue="5"/>
    </book>
    <book id="4741" bookType="History">
        <price id="12388" priceValue="15"/>
    </book>
    <book id="2626" bookType="Drama">
        <price id="12145" priceValue="40"/>
    </book>
</library>

在这个XML中,我需要根据bookType提取priceValue并在其他地方使用它(book节点的顺序正在改变)

我试过这个,但不起作用:

def response = .../library[1]

def i=0
def records = new XmlSlurper().parseText(response)
def size = records.book.size()

for (i=0,i<size,i++)
{
    bookType1 = records.book[i].@bookType.first().value().text();
    if (bookType1 == 'History')
    {
        def priceValueBook = records.book[i].price.@priceValue.first().value().text()
        log.info priceValueBook 
    }
}
def response=…/library[1]
DEFI=0
def records=new XmlSlurper().parseText(响应)
def size=records.book.size()

对于(i=0,i来说,不清楚您究竟在什么时候尝试这样做,但在SoapUI脚本步骤中可以使用以下内容:

context.expand('${test_step#Response#//*:book[@bookType="History"]/*:price/@priceValue}')

这很管用,实际上可以让我的生活更轻松地处理其他SoapUi请求。谢谢!