soapUI XPath断言中的默认命名空间

时间:2018-04-16 04:34:49

标签: xpath soapui

我尝试在soapUI中针对以下XML创建XPath Match断言,以查看是否存在元素:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <ns2:executeResponse xmlns:ns2="http://ws.namf09.anzlic.org.au">
         <responses id="?" xmlns="http://namf09.anzlic.org.au">
            <result status="OK" completed="true" hasErrorsInResponseElements="false"/>
            <response id="200.1">
               <responseResult>
                  <address>
                     <streetNumber1>2</streetNumber1>
                     <streetName>sydney</streetName>
                     <streetType>SQ</streetType>
                     <localityName>sydney</localityName>
                     <stateTerritory>NSW</stateTerritory>
                     <postcode>2000</postcode>
                  </address>
               </responseResult>
            </response>
         </responses>
      </ns2:executeResponse>
   </soapenv:Body>
</soapenv:Envelope>

我的第一次尝试是boolean(//address),soapUI说这是假的。但是,当我让soapUI为我设计namspace时,它已经提出:

declare namespace ns2='http://ws.namf09.anzlic.org.au';
declare namespace ns1='http://namf09.anzlic.org.au';
declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope/';
boolean(//ns1:address)

这很有效,但我不明白ns1命名空间的来源。我认为它是默认值,但是如果没有soapUI我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:1)

XML文档中的名称空间前缀不必与断言中的名称空间前缀相同。它必须匹配 URI 。对于默认名称空间,URI仍然必须匹配,因此您必须在XPath / XQuery中将其称为 something

在您的XML文档中,<address>元素位于http://namf09.anzlic.org.au命名空间中,该命名空间引用了国家地址管理框架。

为了给这个URI一个有意义的名字,而不是像ns1这样纯粹随机的名字,让我们称之为namf

declare namespace namf='http://namf09.anzlic.org.au';
boolean(//namf:address)

答案 1 :(得分:0)

nsX 是SoapUI从响应中生成的默认命名空间。

要评估xPath表达式,您需要一个能够运行xPath函数的编辑器。 试试这个在线解析器:

  

https://www.freeformatter.com/xpath-tester.html#ad-output

这些函数(API)也可用于Java等程序语言:

  

What's a simple way in java to evaluate an xpath on a string and return a result string