旗下导航:搜·么
当前位置:网站首页 > XML教程 > 正文

猖獗XML进修笔记(12)------------XPath【XML教程】,XML,学习笔记,XPath

作者:搜教程发布时间:2019-11-27分类:XML教程浏览:37评论:0


导读:XPath是一门在XML文档中查找信息的言语。XPath用于在XML文档中经由过程元素和属性举行导航。什么是XPath?XPath...
XPath 是一门在 XML 文档中查找信息的言语。XPath 用于在 XML 文档中经由过程元素和属性举行导航。

什么是 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)!

标签:XML学习笔记XPath


欢迎 发表评论: