1

鉴于以下文件...

<?xml version="1.1"?>
<doc xmlns="https://www.example.com" xmlns:n1="https://www.example.com"
     a="1"
     n1:a="2"/>

...(Q1)这个 xpath 3.1 表达式的规范结果是什么..

n2:doc/@n2:a

...如果上下文节点是文档,并且命名空间绑定xmlns:n2="https://www.example.com"附加到 xpath 处理器?

(Q2) 表情呢……

doc/@a

xmlns="https://www.example.com"...在 xpath 处理器上具有命名空间绑定?

我试过的

我在各种不同的 xpath 实现中得到了不一致的结果,这表明这是 XPath 规范中的一个灰色区域。我什至经历了两个节点序列的返回,乍一看,这是一个意想不到的结果。

参考:

  1. https://www.w3.org/TR/2006/REC-xml-names11-20060816
  2. https://www.w3.org/TR/2017/REC-xpath-31-20170321/
4

1 回答 1

1

您示例中的属性不冲突,因为无前缀属性不在命名空间中,不在包含元素的默认命名空间中。@n2:a如果前缀n2绑定到命名空间,将选择命名空间属性https://www.example.com@a将始终选择 no-namespace 属性。(如果您从实现中看到不同的行为,那就错了。)

如果属性实际上是冲突的,例如,如果你有一个元素

    <doc xmlns:n0="https://www.example.com" 
         xmlns:n1="https://www.example.com" 
         n0:a="1" 
         n1:a="2"/>

并通过一个非命名空间感知的 XML 解析器?

答案是输入违反了 XDM 规范中的约束,该规范定义了 XPath 的数据模型。XDM 3.1 的一些引用:

§2.7:与本数据模型中描述的其他一致性约束一样,满足这些约束是前提条件;规范没有推测如果不是会发生什么。

§3:数据模型支持符合 [Namespaces in XML] 或 [Namespaces in XML 1.1] 的格式良好的 XML 文档。

§6.2.1:元素节点必须满足以下约束。(2) 元素的属性节点必须具有不同的 xs:QNames。

所以答案是,如果您的系统允许您在不是命名空间格式良好的文档上执行 XPath 表达式(很可能就是这种情况,例如/默认情况下某些 DOM 实现不支持命名空间),那么 XPath规范明确表示所有赌注都已关闭。

于 2021-05-26T07:31:41.380 回答