什么是与XPath相关的范围内命名空间?

时间:2010-12-08 04:35:23

标签: xml xpath

什么是与XPath相关的范围内命名空间?

由于

1 个答案:

答案 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/n1root元素和foo元素的范围内,但不在bar元素的范围内,因为它具有自己的默认名称空间声明覆盖外部范围之一。但是,名称空间声明xmlns:pf2="http://example.com/ns2"在根元素及其所有后代的范围内。