Surance Center

xpath 教程学习笔记

 

一、常用Xpath表达式

表达式

结果

nodename

选择所有目前节的子节

/

从根节点开始选

//

不管从哪里都要匹配

.

当前节

..

当前节的父节

@

选择属性

 

例子:

<?xml version="1.0" encoding="UTF-8"?>

<company>

       <department>

              <name language="Chinese">Tech Department</name>

              <leader>Zhang San</leader>

              <quantity>20</quantity>

              <target>software develop</target>

       </department>

       <department>

              <name language="Chinese">Sale Department</name>

              <leader>Li Si</leader>

              <quantity>20</quantity>

              <target>Sale work</target>

       </department>

</company>

 

1.       选择所有公司节点的子节点

company

2.       选择根路径下的所有公司

/company

3.       选择公司下面的所有部门

company/department   或者   /company/department

4.       选择所有的部门节点

//department

5.       选择在公司节点下的所有部门节点(不管几级深度)

company//department

6 选择所有属性名为 language 的属性

//@language

注释:在XPath中,一共有6中节点(node):元素、属性、文字、命名空间、处理说明、注释和文档

二、谓词

用来指节点的特殊的值。放在[]里面.

1.       选择公司里面的第一个部门

company/department[1]

2.       选择公司里面的最后一个部门

/company/department[last()] 或者 company/department[last()]

3. 选择公司里面的倒数第二个部门

/company/department[last()-1]

4.       选择公司里面前2个部门

/company/department[position()<3]

5. 选择含有语言属性的名称节点

//name[@language]

5.       选择含有语言属性,并且属性值为Chinese的名称节点

//name[@language=’Chinese’]

6.       选择人数大于10的部门

/company/department[@quantity>10]

7. 选择公司里所有人数大于10的部门的名称

/company/department[@quantity>10]/name

 

通配符

通配符

含义

*

匹配所有的元素节点

@*

匹配所有的属性节点

node()

匹配所有的任何类型的节点

 

1.       选择所有公司的子节点

/company/*

2.       选择文档中所有的元素

//*

3.       选择含有属性的name节点

//name[@*]

 

使用 | 选择多个路径

1.选择所有部门里面的人数和名称元素

//department/name | //department/quantity

3.       选择所有的名称和人数元素

//name | //quantity

4.       选择所有部门里面的名称元素和所有的 人数 元素

/company/department/name|//quantity

 

 

. XPath

制定了上下文节点和要选择的节点关系. 最常见的:child, attribute, self, parent

作用

child

包含当前节点的儿子

attribute

包含当前节点的所有属性

self

只包含但前节点

parent

包含当前节点的父节点

descendent

包含当前节点的后代 后代不包含属性和命名空间的节点

ancestor

包含当前节点的祖先,祖先总是包含根节点

following-sibling

包含当前节点随后的所有节点树,但不包含attribute或者namespace的节点

preceding-sibling

包含当前节点随后的所有节点树, 但不包含attribute或者namespace的节点

following

包含当前节点随后的所有节点树,但不包含attribute或者namespace的节点或当前节点的后代

preceding

包含当前节点随后的所有节点树, 但不包含attribute或者namespace的节点或当前节点的后代

namespace

包含了当前节点的所有namespace节点

descendent-or-self

包含了当前节点和当前节点的后代

ancestor-or-self

包含了当前节点和当前节点的祖先

 

 

路径表达式定位

/company 为绝对路径

company 为相对路径

路径表达式

含义

child::department

选择当前节点下所有为部门的子节点

attribute::language

选择当前节点下所有属性为语言的节点

child::*

选择当前节点下的所有子节点

attribute::*

选择当前节点所有的属性

child::text()

选择当前节点所有子节点的文字

child::node()

选择当前节点所有子节点

descendant::department

选择当前节点所有为部门的孙节点

ancestor::department

选择所有当前节点所有为部门的祖先节点

ancestor-or-self

当前节点和其祖先节点为部门的节点

child::*/child::quantity

当前节点素有含人数的孙子节点

 

.XPath运算符

运算符

名称

人数

作用

|

取交集

//部门一|//部门二

返回所有部门一和部门二节点

+

1+1

2

-

1-1

0

*

1*1

1

div

1 div 1

1

=

等于

人数=1

如果人数等于1则返回true,否则返回false

!=

不等于

人数!=1

如果人数不等于1则返回true,否则false

小于

人数<1

如果人数小于1则返回true,否则false

<=

小于等于

人数<=1

如果人数小于等于1则返回true,否则false

大于

人数>1

如果人数大于1则返回true,否则false

>=

大于等于

人数>=1

如果人数大于等于1则返回true,否则false

or

或者

人数=1 or 人数=2

如果人数等于1或者等于2,则返回true,否则false

and

并且

人数>1 and 人数<5

如果人数大于1或者小于5,则返回true,否则false

mod

取余数

5 mod 2

1

 

综合实例:

1.       选出科技部的人数

/company/department[name='Tech Department']/quantity/text()

posted @ 2007-06-07 18:14  xxp  阅读(470)  评论(0编辑  收藏  举报
Surance Center