什么是与XPath相关的范围内命名空间?
由于
答案 0 :(得分:9)
对于XSLT / XPath 1.0数据模型,http://www.w3.org/TR/xpath/#namespace-nodes中的XPath 1.0规范说明了以下namespace nodes
:
每个元素都有一组关联的 名称空间节点,每个不同的一个 名称空间的名称空间前缀 元素(包括xml前缀, 这是由隐含声明的 XML命名空间建议书[XML 名称])和一个默认值 命名空间,如果一个在范围内 元件。
命名空间声明及其范围在XML命名空间规范中定义,http://www.w3.org/TR/xml-names/#scoping说:
命名空间声明的范围 声明前缀从 它的开始标记的开头 似乎到了最后 相应的结束标记,不包括 任何内部声明的范围 相同的NSAttName部分。在这种情况下 空标记,范围是标记 本身。
这样的命名空间声明适用 到所有元素和属性名称 在其前缀匹配的范围内 声明中指明的内容。
http://www.w3.org/TR/xml-names/#defaulting说明以下关于任何默认命名空间声明的范围(即xmlns="http://example.com/ns1
):
默认命名空间的范围 声明从一开始就延伸 它出现的起始标签 到相应的结尾 结束标记,不包括任何范围 内部默认命名空间声明。 在空标记的情况下,范围 是标签本身。
以
为例给您举个例子<root xmlns="http://example.com/n1" xmlns:pf2="http://example.com/ns2">
<foo>
<bar xmlns="http://example.com/ns3">whatever</bar>
</foo>
</root>
默认名称空间声明http://example.com/n1
在root
元素和foo
元素的范围内,但不在bar
元素的范围内,因为它具有自己的默认名称空间声明覆盖外部范围之一。但是,名称空间声明xmlns:pf2="http://example.com/ns2"
在根元素及其所有后代的范围内。