Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 如何为Soap UI使用查询匹配_Xpath_Mocking_Soapui - Fatal编程技术网

Xpath 如何为Soap UI使用查询匹配

Xpath 如何为Soap UI使用查询匹配,xpath,mocking,soapui,Xpath,Mocking,Soapui,在Soap UI中使用MockOperation编辑器时遇到问题 我收到了这个请求: <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body> <methodName xmlns="http://tempuri.org/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <dataAr

在Soap UI中使用MockOperation编辑器时遇到问题

我收到了这个请求:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <methodName xmlns="http://tempuri.org/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
      <dataAreaId>error</dataAreaId>
      <pInvoiceList>
      <dataAreaId>NOTTHESAME</dataAreaId>
        ...
      </pInvoiceList>
    </methodName>
  </s:Body>
</s:Envelope>

错误
不一样
...
我尝试了几乎所有的XPATH表达式,但总是得到“请求中缺少匹配项”

在Xpath框中填写什么

我试过:

  • //dataAreaId/text()
  • //数据区域ID/
  • //数据区域ID
  • /dataAreaId/text()
  • /数据区域ID
  • /methodName/dataAreaId/text()
  • /methodName/dataAreaId/
  • /methodName/dataAreaId
    • 这样写

      第一个

      //methodName[1]/dataAreaId[1]

      第二个

      //methodName[1]/pInvoiceList[1]/dataAreaId[1]


      *如果在Xml中有多个同名节点,那么应该使用数字来定位该特定节点。

      我最终根据用户1740631的答案找到了它

      看来它毕竟与名称空间有关

      正确的语法:

      declare namespace tem='http://tempuri.org/';
      //tem:methodName/tem:dataAreaId[1]
      

      有一个很好的提示:当为Testcase(或者也可能在模拟窗口中)定义断言时,XPath表达式字段上方有一个按钮“Declare”。它看起来不像一个按钮,直到你用鼠标指针指向它,所以一开始我没有意识到

      只需单击按钮,SoapUI(实际上我使用5.2.1)将为您添加您可以使用的declare语句


      我碰巧发现了这一特征,因为它实际上并不可见。也许这也有帮助…

      如果您不关心名称空间,可以使用以下语法:

      XPath1.0

      //*[local-name() = 'methodName']/*[local-name() = 'dataAreaId'][1]
      
      //*:methodName/*:dataAreaId[1]
      
      XPath2.0

      //*[local-name() = 'methodName']/*[local-name() = 'dataAreaId'][1]
      
      //*:methodName/*:dataAreaId[1]
      

      您想要节点,所有的节点都使用该名称,还是只需要节点中的文本?另外,以“/”结尾的XPath无效。我要第一个以“/”结尾的XPath的文本。仍然没有结果。这可能是因为缺少名称空间,还是我的建议真的很愚蠢?是的,就是这样。他们的网站没有给出这个提示,这真让人恼火。我的XML结果不包含名称空间前缀,但它仍然要求我按照上面的建议创建一个虚拟名称空间。