什么是 XPath?
XPath 运用途径表达式在 XML 文档中举行导航
XPath 包含一个规范函数库
XPath 是 XSLT 中的重要元素
XPath 是一个 W3C 规范
XPath 途径表达式
XPath 运用途径表达式来拔取 XML 文档中的节点或许节点集。这些途径表达式和我们在通例的电脑文件体系中看到的表达式异常类似。
XPath 规范函数
XPath 含有凌驾 100 个内建的函数。这些函数用于字符串值、数值,日期和时候比较、节点和 QName 处置惩罚、序列处置惩罚、逻辑值等等。
在 XPath 中,有七种范例的节点:元素、属性、文本、定名空间、处置惩罚指令、解释以及文档节点(或成为根节点)。
XPath 术语
节点(Node)
在 XPath 中,有七种范例的节点:元素、属性、文本、定名空间、处置惩罚指令、解释以及文档(根)节点。XML 文档是被作为节点树来看待的。树的根被称为文档节点或许根节点。
请看下面这个 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" (属性节点)
基础值(或称原子值,Atomic value)
基础值是无父或无子的节点。
基础值的例子:
J K. Rowling "en"
项目(Item)
项目是基础值或许节点。
节点关联
父(Parent)
每一个元素以及属性都有一个父。
鄙人面的例子中,book 元素是 title、author、year 以及 price 元素的父:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
子(Children)
元素节点可有零个、一个或多个子。
鄙人面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
同胞(Sibling)
具有雷同的父的节点
鄙人面的例子中,title、author、year 以及 price 元素都是同胞:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
前辈(Ancestor)
某节点的父、父的父,等等。
鄙人面的例子中,title 元素的前辈是 book 元素和 bookstore 元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
子女(Descendant)
某个节点的子,子的子,等等。
鄙人面的例子中,bookstore的子女是 book、title、author、year 以及 price 元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
XPath Axes(坐标轴)
XML 实例文档
我们将鄙人面的例子中运用此 XML 文档:
<?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>
XPath 轴
轴可定义某个相对于当前节点的节点集。
轴称号 | 效果 |
---|---|
ancestor | 拔取当前节点的一切前辈(父、祖父等) |
ancestor-or-self | 拔取当前节点的一切前辈(父、祖父等)以及当前节点自身 |
attribute | 拔取当前节点的一切属性 |
child | 拔取当前节点的一切子元素。 |
descendant | 拔取当前节点的一切子女元素(子、孙等)。 |
descendant-or-self | 拔取当前节点的一切子女元素(子、孙等)以及当前节点自身。 |
following | 拔取文档中当前节点的完毕标签以后的一切节点。 |
namespace | 拔取当前节点的一切定名空间节点 |
parent | 拔取当前节点的父节点。 |
preceding | 拔取文档中当前节点的最先标签之前的一切节点。 |
preceding-sibling | 拔取当前节点之前的一切同级节点。 |
self | 拔取当前节点。 |
位置途径表达式
位置途径可所以相对的,也可所以相对的。
相对途径起始于正斜杠( / ),而相对途径不会如许。在两种状况中,位置途径均包含一个或多个步,每一个步均被斜杠支解:
相对位置途径:
/step/step/...
相对位置途径:
step/step/...
每一个步均依据当前节点集当中的节点来举行盘算。
步(step)包含:
轴(axis)
定义所选节点与当前节点之间的树关联
节点测试(node-test)
辨认某个轴内部的节点
零个或许更多谓语(predicate)
更深切地提炼所选的节点集
步的语法:
轴称号::节点测试[谓语]
实例
例子 | 效果 |
---|---|
child::book | 拔取一切属于当前节点的子元素的 book 节点 |
attribute::lang | 拔取当前节点的 lang 属性 |
child::* | 拔取当前节点的一切子元素 |
attribute::* | 拔取当前节点的一切属性 |
child::text() | 拔取当前节点的一切文簿子节点 |
child::node() | 拔取当前节点的一切子节点 |
descendant::book | 拔取当前节点的一切 book 子女 |
ancestor::book | 挑选当前节点的一切 book 前辈 |
ancestor-or-self::book | 拔取当前节点的一切book前辈以及当前节点(假如此节点是book节点的话) |
child::*/child::price | 拔取当前节点的一切 price 孙。 |
XPath 运算符
XPath 表达式可返回节点集、字符串、逻辑值以及数字。
XPath 运算符
下面列出了可用在 XPath 表达式中的运算符:
运算符 | 形貌 | 实例 | 返回值 |
---|---|---|---|
| | 盘算两个节点集 | //book | //cd | 返回一切带有 book 和 cd 元素的节点集 |
+ | 加法 | 6 + 4 | 10 |
- | 减法 | 6 - 4 | 2 |
* | 乘法 | 6 * 4 | 24 |
p | 除法 | 8 p 4 | 2 |
= | 即是 | price=9.80 | 假如 price 是 9.80,则返回 true。 假如 price 是 9.90,则返回 fasle。 |
!= | 不即是 | price!=9.80 | 假如 price 是 9.90,则返回 true。 假如 price 是 9.80,则返回 fasle。 |
< | 小于 | price<9.80 | 假如 price 是 9.00,则返回 true。 假如 price 是 9.90,则返回 fasle。 |
<= | 小于或即是 | price<=9.80 | 假如 price 是 9.00,则返回 true。 假如 price 是 9.90,则返回 fasle。 |
> | 大于 | price>9.80 | 假如 price 是 9.90,则返回 true。 假如 price 是 9.80,则返回 fasle。 |
>= | 大于或即是 | price>=9.80 | 假如 price 是 9.90,则返回 true。 假如 price 是 9.70,则返回 fasle。 |
or | 或 | price=9.80 or price=9.70 | 假如 price 是 9.80,则返回 true。 假如 price 是 9.50,则返回 fasle。 |
and | 与 | price>9.00 and price<9.90 | 假如 price 是 9.80,则返回 true。 假如 price 是 8.50,则返回 fasle。 |
mod | 盘算除法的余数 | 5 mod 2 | 1 |
XML实例文档
我们将鄙人面的例子中运用这个 XML 文档:
"books.xml" :
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="WEB"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
节点拔取
我们将运用微软的 XML DOM 对象来载入 XML 文档,并运用 selectNodes() 函数从 XML 文档拔取节点:
set xmlDoc=CreateObject("Microsoft.XMLDOM") xmlDoc.async="false" xmlDoc.load("books.xml") xmlDoc.selectNodes(途径表达式)
拔取一切的 book 节点
下面的这个例子拔取了 bookstore 元素下一切的 book 节点:
xmlDoc.selectNodes("/bookstore/book")
拔取第一个 book 节点
下面的例子仅拔取 bookstore 元素下第一个 book 节点:
xmlDoc.selectNodes("/bookstore/book[0]")
拔取 price
下面的例子从一切的 price 节点拔取文本:
xmlDoc.selectNodes("/bookstore/book/price/text()")
拔取价钱高于 35 的 price 价钱
下面的例子会拔取一切价钱高于 35 的 price 节点:
xmlDoc.selectNodes("/bookstore/book[price>35]/price")
拔取价钱高于 35 的 title 节点
下面的例子会拔取一切价钱高于 35 的 title 节点:
xmlDoc.selectNodes("/bookstore/book[price>35]/title")
以上就是猖獗XML进修笔记(12)------------XPath的内容,更多相关内容请关注ki4网(www.ki4.cn)!