关于带有 SoapUI 和 属性 传输的 xPath 结构的问题 - 需要一些基础知识
Questions about xPath structure with SoapUI and Property Transfer - some basics needed
我现在正在尝试在 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>
在您的负载中,version
是一个元素而不是属性,因此您不需要 @
。
soapUI 试图通过声明名称空间来帮助您,但您可以更简单。如果 version
是您所需要的并且只有一个,您可以使用 //version
直接导航到它而不管名称空间如何。 //
符号将 select 一个节点,无论它在有效负载中的什么位置。
我现在正在尝试在 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>
在您的负载中,version
是一个元素而不是属性,因此您不需要 @
。
soapUI 试图通过声明名称空间来帮助您,但您可以更简单。如果 version
是您所需要的并且只有一个,您可以使用 //version
直接导航到它而不管名称空间如何。 //
符号将 select 一个节点,无论它在有效负载中的什么位置。