有关使用SoapUI和Property Transfer的xPath结构的问题 - 需要一些基础知识

时间:2018-03-07 01:58:31

标签: xpath syntax properties soapui transfer

我现在正在尝试在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>

1 个答案:

答案 0 :(得分:1)

在您的有效负载中,version是元素而非属性,因此您不需要@

soapUI尝试通过声明命名空间来帮助您,但您可以更简单。如果您只需要version且只有一个,则可以使用//version无论命名空间如何都可以直接导航到它。 //表示法将选择一个节点,无论它在有效载荷中的位置。