>  기사  >  백엔드 개발  >  미친 XML 연구 노트 (12)------------XPath

미친 XML 연구 노트 (12)------------XPath

黄舟
黄舟원래의
2017-02-21 14:47:011377검색


XPath는 XML 문서에서 정보를 찾는 언어입니다. XPath는 XML 문서의 요소와 속성을 탐색하는 데 사용됩니다.

XPath란 무엇인가요?

  • XPath는 경로 표현식을 사용하여 XML 문서를 탐색합니다.

  • XPath에는 표준 함수 라이브러리가 포함되어 있습니다.

  • XPath는 XSLT의 주요 요소입니다. 🎜>

  • XPath는 W3C 표준입니다

XPath 경로 표현

XPath는 경로 표현식을 사용하여 XML 문서에서 노드 또는 노드 세트를 선택합니다. 이러한 경로 표현은 일반 컴퓨터 파일 시스템에서 볼 수 있는 표현과 매우 유사합니다.

XPath 표준 함수

XPath에는 100개 이상의 기본 제공 함수가 포함되어 있습니다. 이러한 함수는 문자열 값, 숫자 값, 날짜 및 시간 비교, 노드 및 QName 처리, 시퀀스 처리, 논리값 등에 사용됩니다.


XPath에는 요소, 속성, 텍스트, 네임스페이스, 처리 지침, 주석 및 문서 노드의 7가지 유형의 노드가 있습니다. (또는 루트 노드가 됩니다).

XPath 용어

노드(Node)

XPath에는 7가지 유형의 노드가 있습니다. 요소 , 속성, 텍스트, 네임스페이스, 처리 지침, 주석 및 문서(루트) 노드. 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" (属性节点)

기본값(혹은 원자값, 원자값)

기본값은 상위 또는 하위가 없는 노드입니다.

기본 값의 예:

J K. Rowling
"en"

아이템(Item)

아이템은 기본 값 또는 노드입니다.

노드 관계

부모(Parent)

각 요소와 속성에는 상위가 있습니다.

다음 예에서 book 요소는 제목, 저자, 연도 및 가격 요소의 상위입니다.

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

Children(Children)

요소 노드는 0을 가질 수 있습니다. , 하나 이상의 하위.

다음 예에서 제목, 저자, 연도 및 가격 요소는 모두 book 요소의 하위 요소입니다.

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

Siblings

동일한 상위를 가진 노드

다음 예에서 제목, 작성자, 연도 및 가격 요소는 모두 형제입니다.

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

Ancestor

노드의 상위, 상위의 상위 등.

다음 예에서 title 요소의 조상은 book 요소와 bookstore 요소입니다.



<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

Descendant(Descendant)

노드의 하위 요소인 a 아이의 아이 등

다음 예에서 bookstore의 하위 항목은 책, 제목, 저자, 연도 및 가격 요소입니다.



<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>


다음 예에서는 이 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 Axis

Axis는 현재 노드 세트를 기준으로 노드를 정의합니다.

位置路径表达式

位置路径可以是绝对的,也可以是相对的。

绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:

绝对位置路径:

/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。

9fc5941b8cd202545c198dc5280966e0 大于 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的内容,更多相关内容请关注PHP中文网(www.php.cn)!

 

 

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.