XPath小结

来源:互联网 发布:java装饰模式 编辑:程序博客网 时间:2024/05/16 16:29

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.        作用:返回节点集中的节点个数。

 

                   iv.              node-set id(object)

1.        作用:返回id值为object的节点列表。

2.        例子:id("nick"):返回节点id为“nick”的节点集。

 

b)        字符串函数:

                      i.              string string(object?)

1.        作用:将object的内容转化为string表达式,类试Java中的toString()方法。

 

                   ii.              string concat(string,string,string*)

1.        作用:将所有的string连接在一起。

 

                iii.              boolean starts-with(string,string)

1.        作用:检查第一个字符串是否以第二个字符串作为起始部分

 

                   iv.              boolean contains(string,string)

1.        作用:检查第一个字符串是否包含第二个字符串。

 

                      v.              string substring-before(string,string)

1.        作用:返回第一个字符串中第二个字符串出现位置之前的字符子串。

2.        例子:substring-before("abcde","d")返回"abc"

 

                   vi.              string substring-after(string,string)

1.        作用:返回第一个字符串中第二个字符串出现位置之后的字符子串。

2.        例子:substring-after("abcde","d")返回"e"

 

                vii.              string substring(string,number,number)

1.        作用:第一个数字指定开始索引,第二个数字指定长度。字符串第一个字符的索引为0

 

             viii.              number string-length(string?)

1.        作用:返回字符串长度。

 

                   ix.              string translate(string,string,string)

1.        作用:第一个字符串中每个在第二个字符串中出现的字符,都将被替换为第三个字符串中相同位置的字符,若第三个字符串中没有对应的字符,则第一个字符串中的该字符不被输出。

2.        例子:translate("abcdef","abc","ABC")返回ABCdef

translate("---abc---","abc-","ABC")返回ABC

 

c)        布尔函数:

                      i.              boolean boolean(object)

1.        作用:返回object所对应的布尔表达值。

 

                   ii.              boolean not(boolean)

1.        作用:取反。

 

d)        数学函数:

                      i.              number number(object)

1.        作用:返回object所对应的数值。

 

                   ii.              number sum(node-set)

1.        作用:求节点集中各节点的number值总和。

 

                iii.              number floor(number)

1.        作用:返回不大于number的最大整数值。

 

 

                   iv.              number ceiling(number)

1.        作用:返回不小于number的最大整数值。

 

                      v.              number round(number)

1.        作用:返回number的近似值。

 

 

原创粉丝点击