如何使用 XPath 查询(甚至 XQuery)获取单个元素的命名空间前缀声明?我想检查它们是否在不止 1 个地方被定义。
例如,对于第一个元素,它将是 xmlns 和 xmlns:n,对于第二个只有 xmlns;对于第一个 < n:int> 什么都不是,等等。
我只能找到these我只能获得正在使用的命名空间,但不是我真正想要的。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<plus xmlns="http://lalaivana.me/calc/"
xmlns:n="http://lalaivana.me/numbers/" >
<n:int value="4"/>
<n:int value="5"/>
</plus>
<plus xmlns="http://lalaivana.me/calc/">
<int value="4" xmlns="http://lalaivana.me/numbers/" />
<int value="5"/>
</plus>
</root>
最佳答案
您可以使用函数 in-scope-prefixes()
和 namespace-uri-for-prefix()
以获得绑定(bind)到元素的范围内命名空间的命名空间前缀和命名空间 URI。
for $element in $doc//*
return
for $prefix in fn:in-scope-prefixes($element)
return string-join( (name($element), $prefix,fn:namespace-uri-for-prefix($prefix, $element) ), "|")
请注意,XML 命名空间 http://www.w3.org/XML/1998/namespace
将包含在前缀 xml
中。您可以使用谓词过滤器排除它:
for $element in $doc//*:plus[2]
return
for $prefix in fn:in-scope-prefixes($element)[not(. eq 'xml')]
return string-join((name($element), $prefix,fn:namespace-uri-for-prefix($prefix, $element)), "|")
关于xml - 如何获取单个 XML 元素的所有 namespace 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939604/