Xpath 如何为Soap UI使用查询匹配
在Soap UI中使用MockOperation编辑器时遇到问题 我收到了这个请求: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
<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结果不包含名称空间前缀,但它仍然要求我按照上面的建议创建一个虚拟名称空间。