如何使用 xpath 选择名称空间定义标记

Posted

技术标签:

【中文标题】如何使用 xpath 选择名称空间定义标记【英文标题】:How can i select the namespace definition tag with an xpath 【发布时间】:2022-01-15 04:42:34 【问题描述】:

我有下面的例子:

<?xml version="1.0" encoding="UTF-8"?>
<my:root xmlns:my="http://www.example.com/mynamespace">
<my:child name="Sid">
<my:grandchild name="Sue">
<my:greatgrandchild name="Fred" />
</my:grandchild>
</my:child>
</my:root>

我需要使用 xpath 选择属性 xmlns:my 但它不起作用。 有人可以请教吗?

谢谢!

【问题讨论】:

【参考方案1】:

对于 XPath 1.0(可能还有一些供应商在以后的版本中仍然支持它),您可以使用 namespace:: 轴:

/*/namespace::my

/*/namespace::*[name()='my']

对于 XPath 2.0 及更高版本,您可以使用 fn:namespace-uri-for-prefix()fn:in-scope-prefixes() 函数:

fn:namespace-uri-for-prefix("my", /*)

【讨论】:

另请注意,这会报告特定元素范围内的所有命名空间,包括在祖先元素上声明的命名空间:它不限于在相关元素上实际声明的命名空间。而在 XPath 数据模型中,命名空间没有被建模为属性;它们是不同类型的节点。

以上是关于如何使用 xpath 选择名称空间定义标记的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XPath 选择以下同级/XML 标记

如何在 xpath 表达式中实现具有名称的用户定义函数?

如何使用 xpath/php 获取 xml 文件中的节点名称?

在XPath中选择重复的标记ID

为啥命名空间限定节点没有 XPath 语法?

xml定义及用途