如何使用XPath查询(甚至XQuery)来获取单个元素的nampespace前缀声明?我想检查它们是否在超过1个位置定义.
例如,对于第一个元素,它将是xmlns和xmlns:n,仅用于第二个xmlns; 对于第一个<n:int>,它什么都不是,等等.
我只能找到这些我只能使用名称空间,但不是我真正想要的.
<?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>
Run Code Online (Sandbox Code Playgroud)
您可以使用函数in-scope-prefixes()和namespace-uri-for-prefix()来获取绑定到元素的范围内命名空间的命名空间前缀和命名空间 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) ), "|")
Run Code Online (Sandbox Code Playgroud)
请注意,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)), "|")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
312 次 |
| 最近记录: |