XPath

XPath作用

  • XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。
  • XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。

XPath概述

  • XPath的内容包括三个部分:
    XPath使用路径表达式在XML文档中进行导航。
    XPath包含一个标准函数库。
    XPath是XSLT中的主要元素。
    XPath版本:
    XPath1.0是1999年成为W3C标准
    XPath2.0是2007年确立的
  • XPath的节点
节点类型说明
根节点XML文档的根称为文档节点或根节点
元素节点一个元素的开始标签、结束标签,以及开始标签和结束标签之间的全部内容整体称为元素节点
属性元素的每个属性都是属性节点。属性节点包括属性名和属性值两个部分
文本所有的字符数据,包括CDATA段的字符数据
命名空间命名空间代表XML文档那个中的xmlns:prefix属性
处理指令XML文档的处理指令
注释<!-- 注释-->
  • 示例
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xslDemo.xsl" ?>

<!-- 个人信息-->
<person id="210212201104110821" xmlns:demo="http://www.china.person/dalian">
	<name>田诗琪</name>
	<birthdate>2011-04-11</birthdate>
	<sex>女</sex>
	<high>83cm</high>
</person>

在这里插入图片描述

节点集对象

  • 一个节点集是一组节点的无序组合,它是XPath表达式运算的直接结果。节点集能够包含来自任意七种不同类型的节点。
  • 节点集中每一个节点都被认为是集合中其他节点的兄弟节点。如果节点集中的节点包含子节点,这些子节点并不是节点集的一部分。
  • 根节点就是节点树的根,用“/”来表示。即文档中的所有节点(包括处理指令节点、根元素节点等)都是根节点的子孙节点。文档根元素节点是根节点的子节点。
  • 根节点与文档根元素节点
    是不同的,文档根元素节点是XML文档的第一个顶层元素对应的元素节点。

XPath 路径

XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。

  • XPath路径包括一个或多个Step组成,Step常被翻译为步或步骤。不同Step之间使用“/”分割。
  • XPath中Step的语法如下所示:
    轴::节点测试[限定谓语]
    参数说明:
    轴:用于定义当前节点与所选节点的关系
    节点测试:用于指定轴内部的部分节点
    限定谓语:零个或另个以上的判读语句,使用专用的表达式对轴和节点测试匹配的节点做进一步限定
  • 示例
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fo="http://www.w3.org/1999/XSL/Format" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:fn="http://www.w3.org/2005/xpath-functions">
	<xsl:template match="/root">
	<!--第一行结果中显示的为child::node()筛选出所有当前节点子节点集的内容-->
		<xsl:value-of select="child::node()"/><p/>
	<!--第二行结果中显示的为child::id筛选出的节点集中所有名字为id的节点集中的内容-->
		<xsl:value-of select="child::id"/><p/>
	<!--第三行结果中显示的为child::id[text()=100]筛选出的节点集中所有名字为id并且节点的文本内容为100的节点集中的内容-->
		<xsl:value-of select="child::id[text()=100]"/><p/>
	</xsl:template>
</xsl:stylesheet>

  • 在一个定位路径中轴是一种相互关系,是定位步长本身与上下文节点之间的关系。
    XPath轴(XPath Axes)可定义某个相对于当前节点的节点集
    在XPath中轴的类型或关系有:
    在这里插入图片描述
    在这里插入图片描述

节点关系

  • 父轴(Parent)
    每个元素以及属性都有一个父轴
<book>
<title>Harry Potter</title> 
<author>J K. Rowling</author> 
<year>2005</year> 
<price>29.99</price> 
</book> 

book 元素是 title、author、year 以及 price 元素的父

  • 子轴(Children)
    拥有相同的父轴的节点
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year> 
<price>29.99</price> 
</book> 

title、author、year 以及 price 元素都是 book 元素的子

  • 同胞轴(Sibling)
    元素节点可有零个、一个或多个子轴
<book>
<title>Harry Potter</title> 
<author>J K. Rowling</author> 
<year>2005</year> 
<price>29.99</price> 
</book> 

title、author、year 以及 price 元素都是同胞

  • 先辈轴(Ancestor)
    某节点的父轴、父轴的父轴,等等
<bookstore>
<book>
<title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> 
</book> 
</bookstore>

title 元素的先辈是 book 元素和 bookstore 元素

  • 后代轴(Descendant)
    某个节点的子轴,子轴的子轴,等等
<bookstore>
<book>
	<title>Harry Potter</title> 
	<author>J K. Rowling</author> 
	<year>2005</year> 
	<price>29.99</price> 
</book> 
</bookstore>

bookstore 的后代是 book、title、author、year 以及 price 元素

节点测试

XPath支持的节点测试语法,能够对轴索筛选出的结果集做进一步过滤。具体常用的语法包括:

  1. nodename
    从指定轴匹配的所有节点中选出名称为nodename的节点
  2. node()
    选择与之匹配的所有类型的节点
  3. text()
    选择制定轴匹配的所有文本类型的节点
    4.comment()
    选择指定轴匹配的所有注释节点
  4. processiong-instruction()
    选择指定轴匹配的所有处理指令节点
  5. *
    星号(*)是节点测试的通配符,不对指定轴进行任何过滤

谓词

  • 谓词在步的语法中放在中括号中,一个步中可以包含零个或多个谓词。
  • 谓词本身是一个布尔类型表达式
    例如:child::id[text()=100]中包含了一个谓词,表达的含义是过滤出文本内容等于100的值
  • xPath运算符:
    在这里插入图片描述

XPath函数

XPath1.0中函数库包括共27个函数,根据函数传入的参数可以分为4类:
节点集函数库
布尔函数库
数字函数库
字符串函数库。

节点集函数库

具体包含的函数如下所示:
last(): 返回当前选中节点集的最后一个节点的位置,是一个数字。
position():返回当前正在处理的节点处于选中的节点集的位置,是一个数字。
count(ns):返回当前选中的节点集的节点数量。
local-name(ns?):返回传入节点的本地部分。
namespace-uri(ns?):返回传入节点的命名空间部分URI部分。
name(ns?):返回传入节点的完整扩展名称,如果有命名空间则包括命名空间URI部分。

布尔函数库

具体包含的函数如下所示:
boolean(obj):用于测试参数“obj”是否存在。如果obj指定的是一个节点集,当且仅当指定节点集不为空时返回的结果才是真。如果是一个字符串,当且仅当字符串长度大于零时返回值才是真。如果是一个数字,当且仅当数字大于零才返回真。否则返回的结果为假。
not(boolean):对参数取反,即传入真时返回假,当传入假时函数返回值为真。
true():简单地返回true
false():简单地返回false
lang(str):返回值为布尔值,根据上下文节点是否有xml:lang属性,且它的值是否等于”str”指定的。如果有且相等,则返回true。’

数字函数库

具体包含的函数如下所示:
number(obj):将一个对象转换为数字
sum(ns?):把传入的节点集中每一个节点转换为数字并求和
floor(num):利用截断的原则取整的函数
ceiling(num):利用进一法的原则取整的函数
round(num):返回四舍五入的原则取整的函数

字符串函数库

具体包含的函数如下所示:
string(any):以XPath中的四种类型对象为参数,并将其转换为一个字符串。
concat(string,string,...):传入参数为字符串或模式表达式,返回由两个或更多字符串组成的字符串
substring(string,number,number?):返回指定位置的子串
contains():检查字符串中是否包含另外一个字符串

XPath路径

轴名称简化路径
child::省略
attribute::@
self::.
parent::..
descendant-or-self//
[position()=1][1]
  • 通过绝对路径寻址节点
    斜线“/”代表根节点,绝对路径总是从根节点开始。
    例如:
    /book/preface

  • 通过上下文节点寻址
    不以“/”开头,代表了目标节点与上下文节点的相对位置关系。

  • 示例代码:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<bookstore> 
	<book> 
		<title lang="eng">Harry Potter</title> <price>29.99</price> 
	</book> 
	<book> 
		<title lang="eng">Learning XML</title> <price>39.95</price> 
	</book> 
</bookstore> 

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值