如何找到此 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