位置路径之轴——XPath语法详解系列(十)

位置路径使用轴来指定定位步骤所选的节点与上下文节点之间的关系。

轴 说明

ancestor::

上下文节点的上级。

上下文节点的上级由上下文节点的父级以及父级的父级等组成;因此,ancestor:: 轴总是包括根节点,除非上下文节点就是根节点。

ancestor-or-self::

上下文节点及其上级。

ancestor-or-self:: 轴总是包括根节点。

attribute::

上下文节点的属性。

除非上下文节点为元素,否则,此轴将是空的。

child::

上下文节点的子级。

子级是树中上下文节点以下紧邻的任何节点。但是,属性节点或命名空间节点均不属于上下文节点的子级。

descendant::

上下文节点的子代。

子代是子级或子级的子级,等等;因此,descendant:: 轴永远不会包含属性节点或命名空间节点。

descendant-or-self::

上下文节点及其子代。

following::

树中在上下文节点之后的所有节点,除了子代、属性节点和命名空间节点之外。

following-sibling::

上下文节点的所有后续同辈。

following-sibling:: 轴只标识出现在树中上下文节点之后的父节点子级。该轴不包括所有出现在上下文节点之前的其他子级。

如果上下文节点是属性节点或命名空间节点,following-sibling:: 轴是空的。

namespace::

上下文节点的命名空间节点。

每个处于上下文节点范围内的命名空间都有一个命名空间节点。

除非上下文节点为元素,否则,此轴将是空的。

parent::

上下文节点的父级(如果有)。

父级是树中上下文节点以上紧邻的节点。

preceding::

树中在上下文节点之前的所有节点,除了上级、属性节点和命名空间节点之外。

有一种方法是,将 preceding 轴看作是内容全部出现在上下文节点开始之前的所有节点。

preceding-sibling::

上下文节点的所有前接同辈。

preceding-sibling:: 轴只标识出现在树中上下文节点之前的父节点子级。该轴不包括所有出现在上下文节点之后的其他子级。

如果上下文节点是属性节点或命名空间节点,preceding-sibling:: 轴是空的。

self::

只是上下文节点本身。

每个元素都有一组关联的命名空间节点,一个命名空间节点用于元素范围内的每个不同的命名空间前缀(包括 xml 前缀,该前缀通过 XML 命名空间建议暗示声明),一个命名空间节点用于默认命名空间(如果处于元素范围内)。元素是每个命名空间节点的父级;但是,命名空间节点不是其父元素的子 级。元素不会共享命名空间节点:如果一个元素节点与另一个元素节点不同,一个元素节点的命名空间节点不会与另一个元素节点的命名空间节点相同。这意味着元 素将具有命名空间节点:

  • 对于元素上每个名称以 xmlns: 开头的属性。

  • 对于祖先元素上每个名称以 xmlns: 开头的属性 — 除非该元素本身或较近的上级重新声明该前缀。

  • 对于 xmlns 属性,如果元素或某个上级具有 xmlns 属性,最近的此类元素的 xmlns 属性值为非空。

以下实例中的 <sample> 元素:

<A xmlns="urn:A">
	<B xmlns:test="sample">
		<sample xmlns:sampletest="sampletest" />
	</B>
</A>

包含下列命名空间节点:

xmlns="urn:A"
xmlns:test="sample"
xmlns:sampletest="sampletest"

 

以下实例中的 <sample> 元素:

<A xmlns="urn:A">
	<B xmlns="" xmlns:test="sample">
		<sample xmlns:sampletest="sampletest" xmlns:bar="test" />
	</B>
</A>

包含下列命名空间节点:

xmlns:test="test"
xmlns:sampletest="sampletest"


注意

属性 xmlns="" 取消默认命名空间的声明。

 

命名空间节点具有扩展名称:本地部分是命名空间前缀(如果命名空间节点用于默认的命名空间,本地部分为空);命名空间统一资源标识符 (URI) 总为空。

命名空间节点的字符串值是绑定到命名空间前缀上的命名空间 URI;如果是相对的,必须像扩展名称中的命名空间 URI 一样进行解析。

following::

following:: 轴的示例引用以下实例文档:

<A>
	<B>
		<C>sample</C>
		<C>sample2</C>
	</B>
	<B>
		<C>sample</C>
		<C>sample2</C>
		<D>sample3</D>
	</B>
</A>
 
查询 返回的节点

A/B[1]/following::*

<B>
	<C>sample</C>
	<C>sample2</C>
	<D>sample3</D>
</B>
<C>sample</C>
<C>sample2</C>
<D>sample3</D> 

A/B[1]/following::node()

<B>
	<C>sample</C>
	<C>sample2</C>
	<D>sample3</D>
</B>
<C>sample</C>
sample
<C>sample2</C>
sample2
<D>sample3</D>
sample3 

preceding::

preceding:: 轴的示例引用以下实例文档:

<A>
	<B>
		<C test="sampletest">sample</C>
		<C>sample2</C>
	</B>
	<B>
		<C>sample</C>
		<C>sample2</C>
		<D>sample3</D>
	</B>
</A>
 
查询 返回的节点

A/B[2]/preceding::*

<B>
	<C test="sampletest">sample</C>
	<C>sample2</C>
</B>
<C>sample</C>
<C>sample2</C>

following-sibling::

following-sibling:: 轴的示例引用以下实例文档:

<A>
	<B>
		<C test="sampletest">sample</C>
		<C>sample2</C>
	</B>
	<B>
		<C>sample</C>
		<C>sample2</C>
		<D>sample3</D>
	</B>
</A>
 
查询 返回的节点

A/B[1]/following-sibling::*

<B>
	<C>sample</C>
	<C>sample2</C>
	<D>sample3</D>
</B>

preceding-sibling::

preceding-sibling:: 轴的示例引用以下实例文档:

<A>
	<B>
		<C test="sampletest">sample</C>
		<C>sample2</C>
	</B>
	<B>
		<C>sample</C>
		<C>sample2</C>
		<D>sample3</D>
	</B>
</A>
 
查询 返回的节点

A/B[2]/preceding-sibling::*

<B>
	<C test="sampletest">sample</C>
	<C>sample2</C>
</B>

你可能感兴趣的:(C++,c,xml,C#)