Java 当父标记属性值唯一时,如何获取父标记的标记值?

Java 当父标记属性值唯一时,如何获取父标记的标记值?,java,groovy,automation,soapui,Java,Groovy,Automation,Soapui,我有这样一个SOAP XML数据 <Results> <ResultSet fetchSize="10"> <Row rowNumber="1"> <REL_ID>22439129</REL_ID> <EFF_TMSTP>2015-09-14 07:08:31.246</EFF_TMSTP>

我有这样一个SOAP XML数据

<Results>
    <ResultSet fetchSize="10">
             <Row rowNumber="1">
                <REL_ID>22439129</REL_ID>
                <EFF_TMSTP>2015-09-14 07:08:31.246</EFF_TMSTP>
                <RETIRED_TRAN_ID>63859659</RETIRED_TRAN_ID>
                <OBJ_ID>1371718</OBJ_ID>
                <REL_OBJ_ID>1350658</REL_OBJ_ID>
                <CUST_VIEW_CD>CORE</CUST_VIEW_CD>
                <CUST_MODEL_CD>CESE</CUST_MODEL_CD>
                <TYPE_CD>DRVD</TYPE_CD>
                <UNLINK_FLG>N</UNLINK_FLG>
                <EXPR_TMSTP>9999-12-31 23:59:59.999</EXPR_TMSTP>
                <TRAN_TMSTP>2015-09-14 07:08:31.246</TRAN_TMSTP>
                <RETIRED_TRAN_TMSTP>9999-12-31 23:59:59.999</RETIRED_TRAN_TMSTP>
                <TRAN_ID>63859659</TRAN_ID>
            </Row>
            <Row rowNumber="2">
                <REL_ID>22482704</REL_ID>
                <EFF_TMSTP>2015-09-24 06:27:43.358</EFF_TMSTP>
                <RETIRED_TRAN_ID>64285012</RETIRED_TRAN_ID>
                <OBJ_ID>11983064</OBJ_ID>
                <REL_OBJ_ID>1350658</REL_OBJ_ID>
                <CUST_VIEW_CD>CORE</CUST_VIEW_CD>
                <CUST_MODEL_CD>CESE</CUST_MODEL_CD>
                <TYPE_CD>DRVD</TYPE_CD>
                <UNLINK_FLG>N</UNLINK_FLG>
                <EXPR_TMSTP>9999-12-31 23:59:59.999</EXPR_TMSTP>
                <TRAN_TMSTP>2015-09-24 06:27:43.358</TRAN_TMSTP>
                <RETIRED_TRAN_TMSTP>9999-12-31 23:59:59.999</RETIRED_TRAN_TMSTP>
                <TRAN_ID>64285012</TRAN_ID>
            </Row>
            <Row rowNumber="3">
                <REL_ID>25372326</REL_ID>
                <EFF_TMSTP>2016-07-08 04:46:02.591</EFF_TMSTP>
                <RETIRED_TRAN_ID>81170279</RETIRED_TRAN_ID>
                <OBJ_ID>13613079</OBJ_ID>
                <REL_OBJ_ID>1350658</REL_OBJ_ID>
                <CUST_VIEW_CD>CORE</CUST_VIEW_CD>
                <CUST_MODEL_CD>CI</CUST_MODEL_CD>
                <TYPE_CD>DRVD</TYPE_CD>
                <UNLINK_FLG>N</UNLINK_FLG>
                <EXPR_TMSTP>9999-12-31 23:59:59.999</EXPR_TMSTP>
                <TRAN_TMSTP>2016-07-08 04:46:02.595</TRAN_TMSTP>
                <RETIRED_TRAN_TMSTP>9999-12-31 23:59:59.999</RETIRED_TRAN_TMSTP>
                <TRAN_ID>81170279</TRAN_ID>
            </Row>
    </ResultSet>
</Results>

22439129
2015-09-14 07:08:31.246
63859659
1371718
1350658
核心
塞斯
DRVD
N
9999-12-31 23:59:59.999
2015-09-14 07:08:31.246
9999-12-31 23:59:59.999
63859659
22482704
2015-09-24 06:27:43.358
64285012
11983064
1350658
核心
塞斯
DRVD
N
9999-12-31 23:59:59.999
2015-09-24 06:27:43.358
9999-12-31 23:59:59.999
64285012
25372326
2016-07-08 04:46:02.591
81170279
13613079
1350658
核心
词
DRVD
N
9999-12-31 23:59:59.999
2016-07-08 04:46:02.595
9999-12-31 23:59:59.999
81170279
从上面的响应/XML中,我必须从每一行集合中收集OBJ_ID、REL_OBJ_ID、CUST_MODEL_CDTYPE_CD标记值,因为这四个值将作为参数传递给另一个WebService请求

仅供参考:我正在SOAPUI工具中通过Groovy脚本使用此工具。

如果你能提供这方面的样品,将对我有所帮助


谢谢

类似这样的内容应该可以收集需要的字段:

def xml = new XmlSlurper().parseText(resultsText)
List<groovy.util.slurpersupport.NodeChild> list =
        xml?.ResultSet?.Row?.collect{it.OBJ_ID + it.REL_OBJ_ID + it.CUST_MODEL_CD + it.TYPE_CD}
对于脚本断言和提供的响应:

def xml = new XmlSlurper().parseText(messageExchange.response.responseContent)
List<groovy.util.slurpersupport.NodeChild> list =
        xml?.ResultSet?.Row?.collect{it.OBJ_ID + it.REL_OBJ_ID + it.CUST_MODEL_CD + it.TYPE_CD}
assert !(list.isEmpty())        
assert (list.size() == 3)   
defxml=newxmlslurper().parseText(messageExchange.response.responseContent)
列表=
xml?.ResultSet?.Row?.collect{it.OBJ_ID+it.REL_OBJ_ID+it.CUST_MODEL_CD+it.TYPE_CD}
断言!(list.isEmpty())
断言(list.size()==3)

如果您的XML文档有效,您可以获得所有
对象ID的列表(例如),如下所示:

如果您想收集它们:

List objIds = results?.ResultSet?.Row?.OBJ_ID.collect{it}
println(objIds)

希望能有所帮助。

在运行脚本断言时,我没有得到列表中的任何值编辑了我对Scrip断言的回答。我有有效的资产谢谢你的答复。如果我使用这个脚本,我只能得到OBJ_ID而不是全部。为什么?def results=new XmlSlurper().parseText(messageExchange.response.responseContent)List objIds=results?.ResultSet?.Row?.collect{it.OBJ_ID+it.REL_OBJ_ID+it.CUST_MODEL_CD+it.TYPE_CD}log.info(objIds)很难说,可能是soapui和groovy中的“内部小猫”。用简单的脚本就可以了。也许可以将值收集为字符串并断言它们?像这样:
xml?.ResultSet?.Row?.collect{{${it.OBJ_ID}${it.REL_OBJ_ID}${it.CUST_MODEL_CD}${it.TYPE_CD}
<代码>断言(list.toString()=“[1371718 1350658 CESE DRVD,11983064 1350658 CESE DRVD,13613079 1350658 CI DRVD]”
确保您的XML是有效的(它应该以
而不是
结尾)。这是一个复制粘贴错误…我得到了正确的响应,所有标记都已关闭。@Karunagara,因为有三行
,是否要在循环中发送以下web服务请求3次(次数等于响应行计数)?是的。我必须从响应的每一行收集四个标记值。i、 e.上述XMLdef groovyUtils=new com.eviware.soapui.support.groovyUtils(context)def responseHolder=groovyUtils.getXmlHolder(messageExchange.responseContent)if(responseHolder!=null){def results=new XmlSlurper().parseText(responseHolder)results?.ResultSet?.Row?.OBJ_ID.each{println(it)}else{log.info(“找不到响应”)}对于上面的脚本,我在“results”中得到NULL。但是如果我删除那些“XmlSlurper()”部分并添加此->def ARR_OBJ_ID=responsehold.getNodeValues(“//OBJ_ID”)log.info(ARR_OBJ_ID[0])…我得到了价值…@Karunagara使用上面的代码它应该可以工作,它没有在您这边出现我们在这里看不到的不同之处,在您上下文之外的某个地方尝试您的代码它检查它是否与GroovyUtils(上下文)有关,并使用try/catch保护parserText()块以查看是否出现了问题。
def xml = '''<Results>...</Results>'''
def results = new XmlSlurper().parseText(xml)
results?.ResultSet?.Row?.OBJ_ID.each {
    println(it)
}
1371718
11983064
13613079
List objIds = results?.ResultSet?.Row?.OBJ_ID.collect{it}
println(objIds)