关于带有 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 一个节点,无论它在有效负载中的什么位置。