7

我在 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()
  • //dataAreaId/
  • //dataAreaId
  • /dataAreaId/文本()
  • /dataAreaId
  • /methodName/dataAreaId/text()
  • /方法名/dataAreaId/
  • /methodName/dataAreaId
4

4 回答 4

11

我终于设法根据user1740631的回答得到它

看来我毕竟与命名空间有关。

正确的语法:

declare namespace tem='http://tempuri.org/';
//tem:methodName/tem:dataAreaId[1]
于 2012-10-31T07:29:26.977 回答
4

像这样写

第一个

//方法名[1]/dataAreaId[1]

对于第二个

//方法名[1]/pInvoiceList[1]/dataAreaId[1]

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

于 2012-10-31T05:21:30.537 回答
3

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

XPath1.0

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

XPath2.0

//*:methodName/*:dataAreaId[1]
于 2017-02-21T08:50:28.463 回答
0

有一个很好的提示:当为测试用例(或者也可能在模拟窗口中)定义断言时,XPath-Expression-Field 上方有一个“声明”按钮。它看起来并不像一个按钮,直到你用鼠标指针指向它,所以我一开始并没有意识到它。

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

我偶然发现了该功能,因为它并不真正可见。也许这也可以帮助...

于 2016-11-15T09:38:40.510 回答