xml - 如何在 XPath 中通过属性命名空间查找元素

标签 xml xpath namespaces

我正在尝试使用 XPath 查找在给定命名空间中具有某个元素的所有元素。

例如,在下面的文档中我想找到 foo:bardoodah 元素:

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:foo="http://foo.example.com">
  <foo:bar quux="value">Content</foo:bar>
  <widget>Content</widget>
  <doodah foo:quux="value">Content</doodah>
</root>

我知道我可以使用以下 XPath 表达式从给定的命名空间加载所有属性:

"//@*[namespace-uri()='http://foo.example.com']"

但是:

  • 这没有给我元素,只有属性。
  • 如果元素包含来自该命名空间的多个属性,则此选择器将返回每个属性而不是每个元素的结果

是否可以得到我想要的,还是必须收集属性并计算它们对应的唯一元素集?

最佳答案

使用:

//*[namespace-uri()='yourNamespaceURI-here'
   or
    @*[namespace-uri()='yourNamespaceURI-here']
   ]

谓词两个条件与 XPath or 运算符进行或运算。

因此,XPath 表达式会选择满足以下任一条件的任何元素:

  • 属于指定的命名空间。
  • 具有属于指定命名空间的属性。

关于xml - 如何在 XPath 中通过属性命名空间查找元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/529556/

相关文章:

java - 编码 xml 文件时到底发生了什么

java - 在不使用文件的情况下从 JAXB 注释类生成 XSD

soap - 如何基于 WSDL 文件构建 SOAP Header 命名空间

actionscript-3 - 为什么我必须使用 Flash 创建一个 AS3 包?

permissions - 媒体维基 1.18.3/1.19.0 : Namespaces restrictions

c# - 使用 XmlDictionaryWriter.CreateBinaryWriter 和 XmlDictionary 编写紧凑的 xml

android - SharedPreferences 值未更新

python - 在 python 中使用 xpath 查询从具有子节点的以下节点中选择整个文本

xpath - 使用xpath帮助从HTML表中提取文本

java - href 链接的 XPATH 不起作用。获取无效选择器 : It should be an element