现在的位置: 首页 > 综合 > 正文

XPath小结

2013年12月07日 ⁄ 综合 ⁄ 共 4226字 ⁄ 字号 评论关闭

1.   XPath概述

XPath是一种在XML文件中,进行节点定位和选取的语言。他的核心是通过“路径表达式,对某一符合路径表达式要求的节点集合进行选取。

 

2.   XPath中的树模型

XPathXML文件中的节点组织为树状。XPath定义了7中节点类型:根节点,元素节点,文本节点,属性节点,名字空间节点,命令处理节点,注释节点。他们之间的关系可以表述如下:

 

引用关系


父子关系


根节点


元素节点


文本节点


属性节点


命令处理节点


注释节点


名字空间节点

 

 

 

 

 

 

 

 

 

 

 


注:父子关系是指前节点是后节点的父亲,后节点是前节点的儿子。引用关系是指前节点是后节点的父亲,但后节点不是前节点的儿子。

 

3.   路径表达式(LocationPath

LocationPath->AbsoluteLocationPath | RelativeLocationPath

 

AbsoluteLocationPath->/RelativeLocationPath? | AbbreviatedAbsoluteLocationPath

RelativeLocationPath->Step | RelativeLocationPath/Step | AbbreviatedRelativeLocationPath

 

AbbreviatedAbsoluteLocationPath->//RelativeLocationPath

AbbreviatedRelativeLocationPath-> RelativeLocationPath//Step

AbbreviatedStep->. | ..

AbbreviateAxisSpecifier->@?

 

Step->AxisSpecifier NodeTest Predicate* | AbbreviatedStep

 

AxisSpecifier->AxisName:: | AbbreviatedAxisSpecifier

AxisName->ancestor | ancestor-or-self | attribute | child |

          descendant | descendant-or-self | following | following-sibling |

          namespace | parent | preceding | preceding-sibling | self

 

NodeTest-> NameTest | NodeType() | processing-instruction(Literal)

 

 

Predicate->[PredicateExpr]

PredicateExpr->Expr

Expr-> OrExpr

OrExpr->AndExpr | OrExpr or AndExpr

AndExpr->EqualityExpr | AndExpr and EqualityExpr

EqualityExpr->RelationExpr | EqualityExpr=RelationExpr | EqualityExpr!=RelationExpr

RelationExpr->AdditiveExpr | RelationExpr<AdditiveExpr | RelationExpr<=AdditiveExpr |

               RelationExpr>AdditiveExpr | RelationExpr>=AdditiveExpr

AdditiveExpr-> MultiplicativeExpr | AdditiveExpr+MultiplicativeExpr |

AdditiveExprMultiplicativeExpr

     MultiplicativeExpr->UnaryExpr | MultiplicativeExpr*UnaryExpr |

                        MultiplicativeExpr div UnaryExpr |

MultiplicativeExpr mod UnaryExpr

     UnaryExpr->UnionExpr | -UnaryExpr

     UnionExpr->PathExpr | UnionExpr|PathExpr

     PathExpr->LocationPath | FilterExpr | FilterExpr/RelativeLocationPath |

              FilterExpr//RelativeLocationPath

     FilterExpr->PrimaryExpr | FilterExpr Predicate

PrimaryExpr->VariableReference | (Expr) | Literal | Number | FunctionCall

FunctionCall->FunctionName((Argument(,Argument)*)?)

Argument->Expr

 

 

 

4.   缩写(Abbreviated)

为了简化XPath表达式的表示形式和提高表达式的可读性,XPath提供了一些省略的表达式形式。其中包括:

简写

作用

(空)

self

//

descendant-or-self

@

获取某一属性

.

self

..

parent

.//

descendant

*

child

 

 

 

 

 

 

 

 

 

5.   (AxesName)

AxisName->ancestor | ancestor-or-self | attribute | child |

          descendant | descendant-or-self | following | following-sibling |

          namespace | parent | preceding | preceding-sibling | self

 

轴用于代表一类的节点集合。XPath一共定义了13个轴,分别是:

a)        ancestor

                      i.              作用:获取该节点的父节点,及所有祖先节点。(不包括属性节点,名字空间节点)。

 

b)        ancestor-or-self

                      i.              作用:获取当前节点,及其所有祖先节点。

 

c)        attribute

                      i.              作用:获取当前节点的所有属性节点。

 

d)        child

                      i.              作用:获取该节点的所有子节点。

 

e)        descendant

                      i.              作用:获取该节点的子节点,及所有孙子节点。(不包括属性节点,名字空间节点)。

 

f)        descendant-or-self

                      i.              作用:获取该节点,及其所有孙子节点。

 

g)        following

                      i.              作用:获取该节点的所有后续兄弟节点,及其兄弟节点的子孙节点。(不包括属性节点,名字空间节点)。

 

h)        following-sibling

                      i.              作用:获取该节点的所有后续兄弟节点。(不包括子孙节点,属性节点,名字空间节点)。

 

 

i)        namespace

                      i.              作用:获取该节点的名字空间节点。

 

j)        parent

                      i.              作用:获取该节点的父节点。

 

k)        preceding

                      i.              作用:获取该节点的所有前导兄弟节点,及其兄弟节点的子孙节点。(不包括属性节点,名字空间节点)。

 

l)        preceding-sibling

                      i.              作用:获取该节点的所有前导兄弟节点。(不包括子孙节点,属性节点,名字空间节点)。

m)        self

                      i.              作用:获取当前节点。

 

6.   NodeTest

NodeTest-> NameTest | NodeType() | processing-instruction(Literal)

NodeTest用于在轴所选择的范围内,对节点集进行筛选和过滤。

NameTest->* | NCName* | Qname

NodyType->comment | text | processing-instruction | node

NCName:表示非限定名,即一般的变量名。

Qname:是带前缀格式的名称。即prefix:name

 

7.   谓词(Predicate)

Predicate用于对候选的节点集里面的节点进行过滤,当谓词表达式的返回值为true时,该节点将被包括到新的节点集中。

 

8.   函数(FunctionCall)

FunctionCall->FunctionName((Argument(,Argument)*)?)

Argument->Expr

XPath提供了一个称为核心函数的函数包供程序员使用,其中主要分为节点集函数,字符串函数,布尔函数,数学函数:

a)        节点集函数:

                      i.              number last()

1.        作用:返回最后一个子节点的索引值。

2.        例子:param[last()]:返回最后一个param子节点。

 

                   ii.              number position()

1.        作用:返回节点在父节点的子节点列表中的索引值。

 

                iii.              number count(node-set)

1.        作用:返回节点集中的节点个数。

抱歉!评论已关闭.