我现在正在尝试在SoapUI中进行另一个xpath属性传输,并且再次陷入困境。 而不是细节,我想我会问一些一般性的问题。 如果我想要提取的响应有这样一行:
<ns2:getApprovedPortChangeRequestsResponse xmlns:ns2="http://transferobjects.abc.abc.org">
奇怪的是,当我在SoapUI中单击ns:按钮时,它会生成以下内容:
declare namespace soap='http://schemas.xmlsoap.org/soap/envelope/';
declare namespace ns1='http://transferobjects.abc.abc.org';
declare namespace ns2='http://abc.abc.org/api/serviceorder';
但是上面的ns2行的消息响应非常清楚
然后我认为我可以安全地假设我应该这样做:
declare namespace ns2='getApprovedPortChangeRequestsResponse';
现在,当我执行描述我想捕获的部分时,我正在使用ns2标记,后面跟着我进入消息的部分名称,在这种情况下是两层:
//ns2:return/approvedPortChangeRequests/@version
我想要的值是名为version的字段的值,不知道这次是否需要@符号,它是一个数值,但无论@是否存在,我都会得到null。我已经彻底检查了响应消息,并确定我说得对。在该字段上方的响应中还有其他几个部分,但它们与我所看到的处于同一级别。
我尝试将getApprovedPortChangeRequestsResponse包含在最后一行的父图层中,但没有效果。
只有当我在ns2声明中使用getApprovedPortChangeRequestsResponse时,我才能获得除Null以外的任何内容,然后只会详细说明这样的错误:
[net.sf.saxon.trans.XPathException: XPath syntax error at char 7 on line 2 in {\n//ns2:/return}:
QName cannot end with colon: {ns2:}]
基本上,我完全无知,而且我的googlefu没有向我展示任何我可以对我正在做的事情有任何理解的资源,所以在这方面的任何建议都会受到赞赏。我只需要在SoapUI中做一些这样的例子,我应该很甜蜜。 提前谢谢。
编辑 - 完整回复:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getApprovedPortChangeRequestsResponse xmlns:ns2="http://transferobjects.abc.abc.org">
<return>
<success>true</success>
<approvedPortChangeRequests>
<lspOverride>false</lspOverride>
<numbers>
<complete>false</complete>
<gainingCompanyId>11667</gainingCompanyId>
<losingCompanyId>11657</losingCompanyId>
<notRequired>false</notRequired>
<phoneNumber>
<phoneNumber>098453509</phoneNumber>
</phoneNumber>
</numbers>
<DateTimeStart>2018-03-07T08:00:00+13:00</DateTimeStart>
<som>6001309</som>
<category>Simple</category>
<requestDateTime>2018-03-07T12:05:25+13:00</requestDateTime>
<requesterResellerId>21</requesterResellerId>
<responderResellerId>1</responderResellerId>
<responseDue>
<actualDays>0</actualDays>
<actualHours>1</actualHours>
<actualMinutes>47</actualMinutes>
<businessDays>0</businessDays>
<businessHours>1</businessHours>
<businessMinutes>47</businessMinutes>
<negative>false</negative>
</responseDue>
<status>
<status>Awaiting APC Approval</status>
</status>
<version>1</version>
</approvedPortChangeRequests>
</return>
</ns2:getApprovedPortChangeRequestsResponse>
</soap:Body>
</soap:Envelope>
答案 0 :(得分:1)
在您的有效负载中,version
是元素而非属性,因此您不需要@
。
soapUI尝试通过声明命名空间来帮助您,但您可以更简单。如果您只需要version
且只有一个,则可以使用//version
无论命名空间如何都可以直接导航到它。 //
表示法将选择一个节点,无论它在有效载荷中的位置。