首页 > 软件系统 > 基础知识 > XPath语法
2020
04-06

XPath语法

什么是XPath(XML Path Language)是一门在XML和HTML文档中查找信息的语言,可以用来在XML和HTML文档中对元素和属性进行遍历。

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。

XPath开发工具

Chrome插件XPath Helper

firefox插件XPath Checker Try XPath

XPath语法

选取节点:XPath使用路径表达式来选取XML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

nodename:选取此节点的所有子节点
/:如果在最前面,代表从根节点选取,否则选择某节点之下的某个子节点
    /ul:选取根节点子节点中所有ul节点
    /ul/li:选取根节点子节点中所有ul节点子节点中的li节点
//:从全局节点中选择节点
    //ul:选取所有的ul节点而不管它的位置
    //div//li:选取所有div节点下所有li节点而不管它的位置
@:选取某个节点的属性
    //form//@name:选取所有form节点下所有的name属性值
.:选取当前节点
..:选取当前节点的父节点
text():获取节点中的文本
    //li/text():获取li节点下所有子节点的内容

*:通配符,表示任意字符。
    //div/*:匹配div元素的所有子节点
    //h1[@*]:匹配所有带属性的h1元素
node():匹配任意类型的节点

谓语:用来查找某个特定节点或包含某个指定的值的节点,被镶嵌在方括号中。

[n]:用来选择第n个节点,n从1开始
    //ul/li[3]:表示获取所有ul标签下的第3个li标签的内容
[last()]:选取最后一个节点
[last()-1]:选取倒数第2个节点
[position()<3]:选取前两个节点 [@price]:选取拥有price属性的节点 [@price='value']:选取price属性等于value的节点 [price>3.14]:选取所有price属性的值大于3.14的节点

XPath轴(Axes):选取相对于当前节点的节点集

使用语法:轴名称::nodename
    //p[@class='style1']/parent::div
        选取所有class属性等于style1的p节点的div父节点
    //p[@class='style1']/parent::*
        选取所有class属性等于style1的p节点的所有父节点

ancestor:选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self:选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute:选取当前节点的所有属性。
child:选取当前节点的所有子元素。
descendant:选取当前节点的所有后代元素(子、孙等)。
descendant-or-self:选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following:选取文档中当前节点的结束标签之后的所有节点。
following-sibling:选取当前节点之后的所有兄弟节点
namespace:选取当前节点的所有命名空间节点。
parent:选取当前节点的父节点。
preceding:选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling:选取当前节点之前的所有同级节点。
self:选取当前节点

XPath的运算符

|:同时选取若干个节点
+:加法    -:减法    *:乘法    div:除法
=:等于    !=:不等于
<:小于    <=:小于或等于 >=:大于或等于
or:或    and:与
mod:计算除法的余数

XPath的常用函数

concat(str1,str2,...):拼接字符串
str-join((str1,str2,...),sep=''):使用sep参数的值作为分隔符拼接字符串
substring(str,start,len):返回str字符串从start位置开始指定长度len的子字符串(不提供len参数返回到字符串末尾),下标从1开始
str-length(str):返回字符串的长度,不提供str参数返回当前节点的字符串长度
normalize-space(str):删除str开头和结尾的空格,并把内部所有的连续空格替换为一个,不提供str参数处理当前节点
upper-case(str):把str转换为大写
lower-case(str):把str转换为小写
translate(str1,str2,str3):把str1中的str2替换为str3
contains(str1,str2):str1包含str2返回true,否则返回false
    //div[contains($class,'to')] #获取所有class属性中包含'to'的div
starts-with(str1,str2):str1以str2开始返回true,否则返回false
ends-with(str1,str2):str1以str2结尾返回true,否则返回false
substring-before(str1,str2):返回str2在str1中出现之前的子字符串
substring-after(str1,str2):返回str2在str1中出现之后的子字符串
matches(str,pattern):如果str匹配指定的模式返回true,否则返回false
replace(str,pattern,replace):把指定的模式替换为replace参数,并返回结果
tokenize(str,pattern):用指定的模式分割str并返回分割后的列表
最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。