XPath

XPath

  • XPath作用
  • XPath概述
  • 节点集对象
  • XPath 路径
  • 节点关系
  • 节点测试
  • 谓词
  • XPath函数
    • 节点集函数库
    • 布尔函数库
    • 数字函数库
    • 字符串函数库
  • 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文档的处理指令
注释
  • 示例





	田诗琪
	2011-04-11
	
	83cm

XPath_第1张图片

节点集对象

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

XPath 路径

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

  • XPath路径包括一个或多个Step组成,Step常被翻译为步或步骤。不同Step之间使用“/”分割。
  • XPath中Step的语法如下所示:
    轴::节点测试[限定谓语]
    参数说明:
    轴:用于定义当前节点与所选节点的关系
    节点测试:用于指定轴内部的部分节点
    限定谓语:零个或另个以上的判读语句,使用专用的表达式对轴和节点测试匹配的节点做进一步限定
  • 示例


	
	
		

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

节点关系

  • 父轴(Parent)
    每个元素以及属性都有一个父轴

Harry Potter 
J K. Rowling 
2005 
29.99 
 

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

  • 子轴(Children)
    拥有相同的父轴的节点

Harry Potter
J K. Rowling
2005 
29.99 
 

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

  • 同胞轴(Sibling)
    元素节点可有零个、一个或多个子轴

Harry Potter 
J K. Rowling 
2005 
29.99 
 

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

  • 先辈轴(Ancestor)
    某节点的父轴、父轴的父轴,等等


Harry Potter J K. Rowling 2005 29.99 
 

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

  • 后代轴(Descendant)
    某个节点的子轴,子轴的子轴,等等


	Harry Potter 
	J K. Rowling 
	2005 
	29.99 
 

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_第4张图片

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

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

  • 示例代码:

 
 
	 
		Harry Potter 29.99 
	 
	 
		Learning XML 39.95 
	 
 

XPath_第5张图片
XPath_第6张图片

你可能感兴趣的:(XML)