如何找到此 XML 中 <Result> 标记的 XPath?
How do I find out the XPath to the <Result> tag in this XML?
我从我调用的服务中得到了这个响应。我想在 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 无法 return 一个项目。
我还尝试使用 XML 工具插件在 Notepad++ 中找到它,当我在那里有 <ServiceResponse xmlns="http://schema.Services">
时它会抛出异常。
如何在 soap-UI 中编写此断言?
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']
SoapUI 使用 Saxon XPath / XQuery 处理器,因此您拥有 XPath 2.0。 XPath 2.0 的优点之一是名称空间通配符,因此您可以这样做:
/*:Envelope/*:Body/*:ServiceResult
我从我调用的服务中得到了这个响应。我想在 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 无法 return 一个项目。
我还尝试使用 XML 工具插件在 Notepad++ 中找到它,当我在那里有 <ServiceResponse xmlns="http://schema.Services">
时它会抛出异常。
如何在 soap-UI 中编写此断言?
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']
SoapUI 使用 Saxon XPath / XQuery 处理器,因此您拥有 XPath 2.0。 XPath 2.0 的优点之一是名称空间通配符,因此您可以这样做:
/*:Envelope/*:Body/*:ServiceResult