xml - 不同的默认命名空间中元素的 XPath 是什么?

标签 xml xpath

我处理这个 SOAP 响应:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <StartProcessFileResponse xmlns="http://www.abbyy.com/RecognitionServer4_xml/RecognitionServer4.xml">
         <StartProcessFileResult>{B4815D0C-91F9-4BD3-BF2F-3A70E935AA7B}</StartProcessFileResult>
      </StartProcessFileResponse>
   </soap:Body>
</soap:Envelope>

我需要获取 StartProcessFileResult 的 XPath元素,但是当我在在线 XPath 验证器中尝试这个 XPath 时,我没有找到匹配项:

/soap:Envelope/soap:Body/StartProcessFileResponse/StartProcessFileResult

我尝试了一小段 XPath 和这个 XPath /soap:Envelope/soap:Body返回 <body>元素,但是当我进一步尝试访问 StartProcessFileResponse 时使用此 XPath /soap:Envelope/soap:Body/StartProcessFileResponse , 我找不到匹配项。

我做错了什么?

最佳答案

StartProcessFileResult 位于 http://www.abbyy.com/RecognitionServer4_xml/RecognitionServer4.xml 默认命名空间中。

使用 XPath 库的命名空间绑定(bind)功能,绑定(bind)一个命名空间前缀,比如 rshttp://www.abbyy.com/RecognitionServer4_xml/RecognitionServer4.xml .

然后下面的 XPath 将按要求选择 StartProcessFileResult:

/soap:Envelope/soap:Body/rs:StartProcessFileResponse/rs:StartProcessFileResult

如果不能绑定(bind)命名空间前缀,可以使用local-name()函数代替,

/soap:Envelope/soap:Body/*[local-name()='StartProcessFileResponse']/*[local-name()='StartProcessFileResult']

但首选的方法是创建和使用命名空间前缀绑定(bind)。

关于xml - 不同的默认命名空间中元素的 XPath 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31167803/

相关文章:

Python ElementTree 使用特殊字符 '\x0b' 生成格式不正确的 XML 文件

java - 二进制 XML 文件行 #0 : Error inflating class <unknown>

javascript - 如何从 text() XPath 查询中排除仅换行符的文本节点?

java - 如何获取员工 ID 并将其放入其他元素中

javascript - CSS 选择器查找其中一个子元素具有特定文本值的元素

xml - 使用 VBA 将 XML 网站导入 Access

xml - Adobe build 不接受我的 config.xml 文件中的任何插件(格式错误的 config.xml)

xml - 通过 bash 脚本重新格式化文件 linux 中的文本

c# - 在 XPath 查询中使用 "../"和 "parent"有什么区别?

.net - 获取与Webbrowser文档中的XPath表达式匹配的所有元素