如何找出此 XML 中 <Result> 标记的 XPath?
Posted
技术标签:
【中文标题】如何找出此 XML 中 <Result> 标记的 XPath?【英文标题】:How do I find out the XPath to the <Result> tag in this XML? 【发布时间】:2015-04-03 19:26:43 【问题描述】:我从我正在调用的服务中收到此响应。我希望在 Soap-UI 中编写一个断言来验证 <Result>
标记的值。
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ServiceResponse> <!--Issue happens here when xmlns attribute is present-->
<ServiceResult xmlns:a="http://schemas.datacontract.org/2004/07/services.api.DataContracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<AdditionalInfo i:nil="true"/>
<ErrorMessage/>
<ErrorMessageId i:nil="true"/>
<ErrorMessages xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<InternalId>0</InternalId>
<RecordsAffected>0</RecordsAffected>
<Result>false</Result>
<WarningMessages xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<a:ReturnBase>
</a:ReturnBase>
</ServiceResult>
</ServiceResponse>
</s:Body>
</s:Envelope>
我使用Xpath Testing tool online 找到了正确的路径。当我删除 <ServiceResponse>
标记上的 xmlns 属性时,XPATH 会按预期工作。但是,当我在 <ServiceResponse>
标记上有 xmlns="http://schema.Services"
时,XPath 无法返回项目。
我还尝试使用 XML 工具插件在 Notepad++ 中找到它,当我在那里有 <ServiceResponse xmlns="http://schema.Services">
时它会引发异常。
如何在soap-UI 中编写这个断言?
【问题讨论】:
您错过了为选定的Result
元素提供 XPath 表达式,这是有问题的。一个可能的原因是您没有正确指定命名空间绑定到您正在调用以评估 XPath 表达式的 XPath 处理器。您使用的是哪个 XPath 处理器?请编辑问题并提供这个重要的缺失信息。
【参考方案1】:
XML 命名空间的想法是您可以为它们分配任意前缀。
因此,如果您的 XML 使用默认命名空间,您只需为其添加前缀即可:
declare namespace s='http://schemas.xmlsoap.org/soap/envelope/';
declare namespace serv='http://schema.Services';
/s:Envelope/s:Body/serv:ServiceResponse/serv:ServiceResult/serv:Result[. = 'false']
【讨论】:
【参考方案2】:SoapUI 使用 Saxon XPath / XQuery 处理器,因此您拥有 XPath 2.0。 XPath 2.0 的优点之一是命名空间通配符,因此您可以这样做:
/*:Envelope/*:Body/*:ServiceResult
【讨论】:
以上是关于如何找出此 XML 中 <Result> 标记的 XPath?的主要内容,如果未能解决你的问题,请参考以下文章