XPath函数大全
xpath 常用语法

xpath 常用语法一、XPath简介XPath是一种用于在XML文档中定位节点的语言。
它是一种基于路径表达式的查询语言,可以通过节点名称、属性、位置等信息来查找XML文档中的节点。
二、XPath语法1. 节点选择器- 通配符:使用星号(*)表示选择所有节点。
- 元素节点:使用元素名称选择节点。
- 属性节点:使用[@属性名]选择节点。
- 文本节点:使用text()选择节点。
2. 路径表达式- 相对路径:使用斜杠(/)表示从根节点开始的路径。
- 绝对路径:使用双斜杠(//)表示不考虑节点位置的路径。
- 父节点:使用双点(..)表示选取当前节点的父节点。
- 子节点:使用斜杠(/)表示选取当前节点的子节点。
- 兄弟节点:使用斜杠加节点名称(/节点名称)表示选取当前节点的同级节点。
3. 谓语- 谓语是用来过滤节点的条件表达式,可以在节点选择器后面使用方括号([])来添加谓语。
- 谓语可以使用比较运算符(=、!=、<、>等)和逻辑运算符(and、or)进行条件判断。
4. 逻辑运算符- and:逻辑与运算符,表示同时满足两个条件。
- or:逻辑或运算符,表示满足其中一个条件。
- not:逻辑非运算符,表示不满足条件。
5. 数字函数- count():返回指定节点集合的节点数量。
- sum():计算指定节点集合的数值之和。
- avg():计算指定节点集合的数值平均值。
- min():返回指定节点集合的最小值。
- max():返回指定节点集合的最大值。
6. 字符串函数- concat():连接两个字符串。
- contains():判断一个字符串是否包含另一个字符串。
- starts-with():判断一个字符串是否以另一个字符串开头。
- ends-with():判断一个字符串是否以另一个字符串结尾。
- substring():截取字符串的一部分。
- string-length():返回字符串的长度。
xpath语法与函数

XPath 教程XPath是一种在XML文档中查找信息的语言。
XPath被用来在XML文档中对元素和属性进行遍历。
XPath是W3C XSLT标准的主要元素,并且XQuery和XPointer同时被构建于XPath表达之上。
因此,对XPath的理解是很多高级XML应用的基础。
在W3School,我们提供完整的XPath 2.0、XQuery 1.0和XSLT 2.0的内置函数参考手册。
XPath 函数内容目录XPath 简介本章阐述XPath的概念。
XPath 节点本章详细介绍XPath中不同类型的节点,以及节点之间的关系。
XPath 语法本章阐述XPath的语法。
XPath 轴本章阐述XPath axes(轴)。
XPath 运算符本章列出了可以被用于XPath表达式的运算符。
XPath 实例本章使用"books.xml"文档来演示一些XPath实例。
XPath 摘要本文内容包括在本教程所学知识的一个总结,以及我们向你推荐的下一步应该学习的内容。
XPath 参考手册XPath 函数XPath 2.0、XQuery 1.0和XSLT 2.0的内置函数。
XPath 简介XPath是一种在XML文档中查找信息的语言。
XPath用于在XML文档中通过元素和属性进行导航。
在学习之前应该具备的知识:在您继续学习之前,应该对下面的知识有基本的了解:•HTML / XHTML•XML / XML 命名空间如果您希望首先学习这些项目,请在我们的首页访问这些教程。
什么是XPath?•XPath使用路径表达式在XML文档中进行导航•XPath包含一个标准函数库•XPath是XSLT中的主要元素•XPath是一个W3C标准XPath路径表达式XPath使用路径表达式来选取XML文档中的节点或者节点集。
这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
XPath标准函数XPath含有超过100个内建的函数。
xpath 轴函数

xpath 轴函数
XPath轴函数是XPath语言中的一种非常重要的函数类型,在XPath路径表达式中,轴函数用于在XML文档树中匹配指定类型的节点。
XPath轴函数使用轴名来指示当前节点的父节点、子节点、兄弟节点、前面或后面的节点以及祖先节点等,从而为XPath定位提供了非常方便和高效的方式。
XPath轴函数主要分为以下七种类型:
1. 子节点轴(child::):用于定位当前节点的所有子元素。
2. 父节点轴(parent::):用于定位当前节点的父元素。
3. 祖先节点轴(ancestor::):用于定位当前节点的所有祖先元素。
4. 后代节点轴(descendant::):用于定位当前元素的所有后代元素。
5. 兄弟节点轴(following-sibling::和preceding-sibling::):用于定位当前节点的所有后继或前驱兄弟元素。
6. 属性节点轴(attribute::):用于定位当前元素的所有属性节点。
7. 命名空间节点轴(namespace::):用于定位当前元素的所有命名空间节点。
XPath轴函数的应用非常广泛,可以帮助开发人员快速而准确地定位XML文档中的各种节点,从而实现各种高效的XML文档解析和处理应用。
同时,XPath 轴函数的语法也非常简洁易懂,开发人员只需要按照统一的轴名规则进行定位即可,无需记忆复杂的语法规则,从而大大提高了开发效率。
总之,XPath轴函数是XPath语言中不可或缺的重要组成部分,对于XML文档的解析和处理应用具有非常重要的作用。
在使用XPath轴函数时,开发人员需要根据具体的应用需求选择合适的轴名和轴函数,从而实现各种高效的XML文档操作。
xpath定位中详解id、starts-with、contains、text()和last。。。

xpath定位中详解id、starts-with、contains、text()和last。
1、XPATH使⽤⽅法使⽤XPATH有如下⼏种⽅法定位元素(相⽐CSS选择器,⽅法稍微多⼀点):a、通过绝对路径定位元素(不推荐!)WebElement ele = driver.findElement(By.xpath("html/body/div/form/input"));b、通过相对路径定位元素WebElement ele = driver.findElement(By.xpath("//input"));c、使⽤索引定位元素WebElement ele = driver.findElement(By.xpath("//input[4]"));d、使⽤XPATH及属性值定位元素WebElement ele = driver.findElement(By.xpath("//input[@id='fuck']"));//其他⽅法(看字⾯意思应该能理解吧)WebElement ele = driver.findElement(By.xpath("//input[@type='submit'][@name='fuck']"));WebElement ele = driver.findElement(By.xpath("//input[@type='submit' and @name='fuck']"));WebElement ele = driver.findElement(By.xpath("//input[@type='submit' or @name='fuck']"));e、使⽤XPATH及属性名称定位元素元素属性类型:@id 、@name、@type、@class、@tittle//查找所有input标签中含有type属性的元素WebElement ele = driver.findElement(By.xpath("//input[@type]"));f、部分属性值匹配WebElement ele = driver.findElement(By.xpath("//input[start-with(@id,'fuck')]"));//匹配id以fuck开头的元素,id='fuckyou'WebElement ele = driver.findElement(By.xpath("//input[ends-with(@id,'fuck')]"));//匹配id以fuck结尾的元素,id='youfuck'WebElement ele = driver.findElement(By.xpath("//input[contains(@id,'fuck')]"));//匹配id中含有fuck的元素,id='youfuckyou'g、使⽤任意值来匹配属性及元素WebElement ele = driver.findElement(By.xpath("//input[@*='fuck']"));//匹配所有input元素中含有属性的值为fuck的元素元素定位总结//注:本专题只介绍java版//By idWebElement ele = driver.findElement(By.id());//By NameWebElement ele = driver.findElement(By.id());//By classNameWebElement ele = driver.findElement(By.className());//By tabNameWebElement ele = driver.findElement(By.tagName());//By linkTextWebElement ele = driver.findElement(By.linkText());//By partialLinkTextWebElement ele = driver.findElement(By.partialLinkText());//通过部分⽂本定位连接//By cssSelectorWebElement ele = driver.findElement(By.cssSelector());//By XPATHWebElement ele = driver.findElement(By.xpath());=================================栗⼦=====================================1、id 获取id 的属性值2、starts-with 顾名思义,匹配⼀个属性开始位置的关键字 -- 模糊定位3、contains 匹配⼀个属性值中包含的字符串 -- 模糊定位4、text() 函数⽂本定位5、last() 函数位置定位eg<input id="su" class="bg s_btn btnhover" value="百度⼀下" type="submit"/>//*[@id='su'] 获取id 的属性为'su' 的值或//input[contains(@class,'bg s_btn')]<a class="lb" href="https:///v2/?login&tpl=mn&u=http%3A%2F%%2F" name="tj_login" onclick="return false;">登录</a>//a[starts-with(@name,'tj_lo')] 属性模糊定位//a[contains(@name,'tj_lo')] 属性模糊定位<a href="">百度搜索</a>//a[text()='百度搜索']或//a[contains(text(),"搜索")] --⽂本模糊定位<a id="setf" href="///cache/sethelp/help.html" onmousedown="returnns_c({'fm':'behs','tab':'favorites','pos':0})" target="_blank">把百度设为主页</a>//a[text()='把百度设为主页']/A/B/C[last()] 表⽰A元素→B元素→C元素的最后⼀个⼦元素,得到id值为e2的E元素。
XPath 字符串函数

<employeer>
<name id="0210235">王刚均</name>
<sex>男</sex>
<birthday>1976.4.23</birthday>
</employeer>
<employeer>
<name id="0210296">赵含蕴</name>
<sex>女</sex>
XPath
字符串函数用来对查询结果进行格式化处理,XPath支持字符串函数如表9-8所示。
表9-8字符串函数
字符串函数
说明
示例
concat()
连接两个或多个字符串
concat('hello',' ','China')结果返回字符串
'helloChina'
contains()
若第一个字符串包含第二个字符串,则返回真;否则返回假
contains('1123','3'),3包含于第一个字符串中,所以返回值为真
normalize-space()
删除字符串前后ห้องสมุดไป่ตู้空格
normalize-space(' hello')返回字符串'hello'
starts-with()
如果第一个字符串以第二个字符串开头,则返回真;否则返回假
starts-with('hello','o'),字符串hello不是以o开头,所以返回值为假
XPath语法规则及实例

XPath语法规则一、XPath术语:1.节点:在XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。
XML 文档是被作为节点树来对待的。
树的根被称为文档节点或者根节点。
实例1:XML文档:<?xml version="1.0" encoding="ISO-8859-1"?><bookstore><book><title lang="en">Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price></book></bookstore>上面的XML文档中的节点例子:<bookstore>(文档节点),<author>J K. Rowling</author>(元素节点),lang="en"(属性节点)。
2.基本值(或称原子值,Atomic value)基本值是无父或无子的节点。
基本值的例子:在实例1的xml文档中J K. Rowling、"en"3.项目(Item)项目是基本值或者节点。
4.节点的关系:1)父节点(Parent):每个元素以及属性都有一个父。
在上面实例1的xml 文档中,book 元素是title、author、year 以及price 元素的父节点。
2)子节点(Children):元素节点可有零个、一个或多个子。
在上面实例1的xml 文档中,title、author、year 以及price 元素都是book 元素的子。
3)同胞(Sibling):拥有相同的父的节点,在上面实例1的xml 文档中,title、author、year 以及price 元素都是同胞。
XPath小知识

常用的XPath表达式一些常用的XPath表达式:/catalog/cd/price如果XPath的开头是一个斜线(/)代表这是绝对路径。
如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。
以下的语法会选出文件中所有叫做cd的元素(在树中的任何层级都会被选出来)://cd选择未知的元素使用星号(Wildcards,*)可以选择未知的元素。
下面这个语法会选出/catalog/cd 的所有子元素:/catalog/cd/*以下的语法会选出所有catalog的子元素中,包含有price作为子元素的元素。
/catalog/*/price以下的语法会选出有两层父节点,叫做price的所有元素。
/*/*/price以下的语法会选择出文件中的所有元素。
//*要注意的是,想要存取不分层级的元素,XPath语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。
选择分支使用中括号可以选择分支。
以下的语法从catalog的子元素中取出第一个叫做cd的元素。
XPath的定义中没有第0元素这种东西。
/catalog/cd[1]以下语法选择catalog中的最后一个cd元素:(XPathj并没有定义first() 这种函式喔,用上例的[1]就可以取出第一个元素。
/catalog/cd[last()]以下语法选出含有price子元素的所有/catalog/cd元素。
/catalog/cd[price]以下语法选出price元素的值等于10.90的所有/catalog/cd元素/catalog/cd[price=10.90]以下语法选出price元素的值等于10.90的所有/catalog/cd元素的price元素/catalog/cd[price=10.90]/price选择一个以上的路径使用Or操作数( ¦)就可以选择一个以上的路径。
XPath 数值函数

数值函数用来对数值型数据进行数学计算,XPath支持的数值函数如表9-9所示。
表9-9数值函数
数值函数
说明
示例
ceiling()
返回不小于参数的最小整数
ceiling(5.39)返回值为6
floor()
返回不大于参数的最大整数
floor(5.39)返回值为5
number()
转换参数为数值型
<name>XML基础教程</name>
</book>
<book price="95.00">
<name>XML编程技术大全</name>
</book>
<book price="59.00">
<name>XML HACKS 100个业界最尖端的技巧和工具</name>
</book>
<book price="68.00">
number('5.14')返回值为5.14
round()
返回参数的四舍五入后的值
round(3.2)返回值为3
round(4.8)返回值为5
sum()
返回指定节点集中节点总数目
sum(/food/price)返回食品的总价
number()函数接受的参数是一个字符串值;sum方法接受的参数是一个路径定位表达式;其他函数一般是数值型数据。通过下面实例来具体介绍如何使用sum()函数,XML文档如下所示:
<name>XML精要:语法详解与编程指南</name>
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XPath函数有关数值的函数结果:'Thérèse'fn:string-to-codepoints(string) 根据字符串返回代码点序列。
例子:string-to-codepoints("Thérèse")结果:84, 104, 233, 114, 232, 115, 101fn:codepoint-equal(comp1,comp2) 根据Unicode 代码点对照,如果comp1 的值等于comp2 的值,则返回true。
(/2005/02/xpath-functions/collation/codepoint),否则返回false。
∙fn:compare(comp1,comp2)如果comp1 小于comp2,则返回-1。
如果comp1 等于∙fn:compare(comp1,comp2,collation)comp2,则返回0。
如果comp1 大于comp2,则返回1。
(根据所用的对照规则)。
例子:compare('ghi', 'ghi')结果:0fn:concat(string,string,...) 返回字符串的拼接。
例子:concat('XPath ','is ','FUN!')结果:'XPath is FUN!' fn:string-join((string,string,...),sep) 使用sep 参数作为分隔符,来返回string 参数拼接后的字符串。
例子:string-join(('We', 'are', 'having', 'fun!'), ' ')结果:' We are having fun! '例子:string-join(('We', 'are', 'having', 'fun!'))结果:'Wearehavingfun!'例子:string-join((), 'sep')结果:''∙fn:substring(string,start,len)返回从start 位置开始的指定长度的子字符串。
第一个字符的下∙fn:substring(string,start)标是1。
如果省略len参数,则返回从位置start 到字符串末尾的子字符串。
例子:substring('Beatles',1,4)结果:'Beat'例子:substring('Beatles',2)结果:'eatles'∙fn:string-length(string)返回指定字符串的长度。
如果没有string 参数,则返回当前节∙fn:string-length()点的字符串值的长度。
例子:string-length('Beatles')结果:7∙fn:normalize-space(string)删除指定字符串的开头和结尾的空白,并把内部的所有空白序列∙fn:normalize-space()替换为一个,然后返回结果。
如果没有string 参数,则处理当前节点。
例子:normalize-space(' The XML ')结果:'The XML'fn:normalize-unicode() 执行Unicode 规格化。
fn:upper-case(string) 把string 参数转换为大写。
例子:upper-case('The XML')结果:'THE XML'fn:lower-case(string) 把string 参数转换为小写。
例子:lower-case('The XML')结果:'the xml'fn:translate(string1,string2,string3) 把string1 中的string2 替换为string3。
例子:translate('12:30','30','45')结果:'12:45'例子:translate('12:30','03','54')结果:'12:45'例子:translate('12:30','0123','abcd')fn:escape-uri(stringURI,esc-res) 例子:escape-uri("/test#car", true())结果:"http%3A%2F%%2Ftest#car"例子:escape-uri("/test#car", false())结果:"/test#car"例子:escape-uri ("/~bébé", false())结果:"/~b%C3%A9b%C3%A9"fn:contains(string1,string2) 如果string1 包含string2,则返回true,否则返回false。
例子:contains('XML','XM')结果:truefn:starts-with(string1,string2) 如果string1 以string2 开始,则返回true,否则返回false。
例子:starts-with('XML','X')结果:truefn:ends-with(string1,string2) 如果string1 以string2 结尾,则返回true,否则返回false。
例子:ends-with('XML','X')结果:falsefn:substring-before(string1,string2) 返回string2 在string1 中出现之前的子字符串。
例子:substring-before('12/10','/')结果:'12'fn:substring-after(string1,string2) 返回string2 在string1 中出现之后的子字符串。
例子:substring-after('12/10','/')结果:'10'fn:matches(string,pattern) 如果string 参数匹配指定的模式,则返回true,否则返回false。
例子:matches("Merano", "ran")关于布尔值的函数有关持续时间、日期和时间的函数日期、时间、持续时间的组件提取函数名称说明fn:dateTime(date,time) 把参数转换为日期和时间。
fn:years-from-duration(datetimedur) 返回参数值的年份部分的整数,以标准词汇表示法来表示。
fn:months-from-duration(datetimedur) 返回参数值的月份部分的整数,以标准词汇表示法来表示。
fn:days-from-duration(datetimedur) 返回参数值的天部分的整数,以标准词汇表示法来表示。
fn:hours-from-duration(datetimedur) 返回参数值的小时部分的整数,以标准词汇表示法来表示。
fn:minutes-from-duration(datetimedur) 返回参数值的分钟部分的整数,以标准词汇表示法来表示。
fn:seconds-from-duration(datetimedur) 返回参数值的分钟部分的十进制数,以标准词汇表示法来表示。
fn:year-from-dateTime(datetime) 返回参数本地值的年部分的整数。
例子:year-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))结果:2005fn:month-from-dateTime(datetime) 返回参数本地值的月部分的整数。
例子:month-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))结果:01fn:day-from-dateTime(datetime) 返回参数本地值的天部分的整数。
例子:day-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))结果:10fn:hours-from-dateTime(datetime) 返回参数本地值的小时部分的整数。
例子:hours-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))结果:12fn:minutes-from-dateTime(datetime) 返回参数本地值的分钟部分的整数。
例子:minutes-from-dateTime(xs:dateTime("2005-01-10T12:30-04:10"))结果:30fn:seconds-from-dateTime(datetime) 返回参数本地值的秒部分的十进制数。
例子:seconds-from-dateTime(xs:dateTime("2005-01-10T12:30:00-04:10"))结果:0fn:timezone-from-dateTime(datetime) 返回参数的时区部分,如果存在。
fn:year-from-date(date) 返回参数本地值中表示年的整数。
例子:year-from-date(xs:date("2005-04-23"))结果:2005fn:month-from-date(date) 返回参数本地值中表示月的整数。
例子:month-from-date(xs:date("2005-04-23"))结果:4fn:day-from-date(date) 返回参数本地值中表示天的整数。