名称测试是最常见的一种节点测试形式,可以明确地指定要选择的节点的名称。 但是,如果只指定节点名,不会自动选择相应的节点,因为文档树可能包含同名的不同节点类型。 为了选择相应的节点,名称测试只选择名称与指定名称匹配并且节点类型与指定轴的主要节点类型匹配的节点。
下表列出了各种轴的主要节点类型。
轴 |
主要节点类型 |
---|---|
除了 attribute:: 轴或 namespace:: 轴以外的任何轴(即可以包含元素的轴) |
元素 |
属性 |
属性 |
namespace |
namespace |
名称测试中指定的名称可能属于以下三种类型之一:星号 (*)、QName 或表达式 NCName:*。 下表显示的示例说明每种类型的名称如何与指定的轴配合使用,以找到特定的节点集。
名称 |
返回 |
示例 |
---|---|---|
*(星号) |
对于任何主要节点类型的节点,返回 True。 |
ancestor::* 选择上下文节点的所有上级。 attribute::* 选择上下文节点的所有属性。 namespace::* 选择上下文节点的所有名称属性。 |
QName |
对于任何扩展名称等于 QName 指定的扩展名称的主要节点类型节点,返回 True。 |
child::para 选择所有属于上下文节点子级的 <para> 元素节点。 如果上下文节点没有 <para> 子级,则选择一个空节点集。 |
NCName:* |
对于任何扩展名称包含 NCName 展开到的命名空间 URI 的主要节点类型节点(与本地名称无关),返回 True。 |
child::ns:* 选择带 ns 前缀的命名空间中的所有子元素节点。 |
如果节点测试为 QName,XPath 必须先根据 XML 文件中的上下文命名空间声明展开 QName。 此展开过程与开始标记和结束标记中的元素名的展开过程相同,只是不使用通过 xmlns 声明的默认命名空间。 如果 QName 没有前缀,XPath 将查找本地名称与给定 QName 匹配和命名空间 URI 为空的节点。 如果 QName 的前缀与文件中的任何上下文命名空间均不对应,可能会出错。
如果节点测试为 NCName:*,XPath 展开 NCName 的方式与展开 QName 的方式相同。 同样,如果 NCName 部分与文件的上下文命名空间声明中包含的任何前缀均不对应,NCName:* 可能会出错。