检查同一前缀中的多个URI

时间:2019-10-21 00:44:17

标签: xml xquery

是否可以使用Xquery来检查xml文档是否在不同范围内将不同的URI分配给相同的名称空间前缀?

1 个答案:

答案 0 :(得分:1)

您可以选择(//ns1:*, //@ns1:*)/prefix-from-QName(node-name())来查找我认为的已用前缀:

例如在运行时

<root xmlns="http://example.com/ns1">
    <pf1:foo xmlns:pf1="http://example.com/ns1">
        <pf1:bar xmlns:pf1="http://example.com/ns2"/>
        <pf3:baz xmlns:pf3="http://example.com/ns1">
            <foobar xmlns="" xmlns:pf4="http://example.com/ns1" pf4:att1="whatever"/>
        </pf3:baz>
    </pf1:foo>
</root>

它返回pf1 pf3 pf4,使用count(distinct-values((//ns1:*, //@ns1:*)/prefix-from-QName(node-name())))检查是否使用了多个。示例:https://xqueryfiddle.liberty-development.net/948Fn5t/1

不确定空前缀,因为上面的结果中未包含该前缀,因此可能需要一些额外的处理。