XPath:修订间差异

无编辑摘要
 
(未显示同一用户的7个中间版本)
第14行: 第14行:
==数据模型==
==数据模型==
XPath把XML文档看作一棵树(tree),树包含很多节点(nodes),这一模式仅仅是概念性的,并不要求任何具体的实现。节点分为7种类型:
XPath把XML文档看作一棵树(tree),树包含很多节点(nodes),这一模式仅仅是概念性的,并不要求任何具体的实现。节点分为7种类型:
*根节点
{| class="wikitable"
*单元节点
|-
*文本节点
! 数据模型名称 !! 描述 !! 示例
*属性节点
|-
*命名空间节点
| 根节点(Root Node) || XML文档的顶级节点,是所有其他节点的祖先 || <code>&lt;root&gt; ... &lt;/root&gt;</code>
*处理指令节点
|-
*注释节点
| 元素节点(Element Node) || 表示XML元素的节点,可以包含其他节点 || <code>&lt;book&gt; ... &lt;/book&gt;</code>
|-
| 属性节点(Attribute Node) || 表示XML元素的属性的节点 || <code>&lt;book ISBN="12345"&gt;</code>
|-
| 文本节点(Text Node) || 表示XML元素内的文本内容 || <code>&lt;title&gt;Introduction to XPath&lt;/title&gt;</code>
|-
| 注释节点(Comment Node) || 表示XML注释的节点 || <code>&lt;!-- This is a comment --&gt;</code>
|-
| 处理指令节点(Processing Instruction Node) || 表示XML处理指令的节点 || <code>&lt;?xml version="1.0"?&gt;</code>
|-
| 命名空间节点(Namespace Node) || 表示XML元素的命名空间声明 || <code><nowiki>xmlns:prefix="http://example.com"</nowiki></code>
|}


{{了解更多  
{{了解更多  
第26行: 第37行:
}}
}}


==定位路径==
==路径表达式==
路径表达式可以用于定位树中的节点。
 
{{了解更多
|[https://www.w3.org/TR/xpath-30/#id-path-expressions W3C:XPath 3.0 - 路径表达式]
}}


===节点描述===
===语法===


===轴描述===
===轴描述===
第34行: 第50行:
{| class="wikitable"
{| class="wikitable"
|-
|-
! 轴名称 !! 描述 !! 示例
! 名称 !! 描述 !! 示例
|-
|-
| attribute || 选取元素的属性,可使用<code>@</code>来缩写 || <code>/bookstore/book/attribute::price</code>
| attribute || 选取元素的属性,可使用<code>@</code>来缩写 || <code>/bookstore/book/attribute::price</code>
第63行: 第79行:
|}
|}


{{了解更多
|[https://www.w3.org/TR/xpath-30/#axes  W3C:XPath 3.0 - 轴描述]
}}
===节点测试 ===
{| class="wikitable"
|-
! 名称 !! 描述 !! 示例
|-
| node() || 选取所有类型的节点 || <code>//node()</code>
|-
| text() || 选取文本节点 || <code>//text()</code>
|-
| element() || 选取元素节点 || <code>//element()</code>
|-
| attribute() || 选取属性节点 || <code>//attribute()</code>
|-
| comment() || 选取注释节点 || <code>//comment()</code>
|-
| processing-instruction() || 选取处理指令节点 || <code>//processing-instruction()</code>
|-
| * || 选取所有类型的节点(通配符) || <code>//*</code>
|}


{{了解更多
|[https://www.w3.org/TR/xpath-30/#node-tests  W3C:XPath 3.0 - 节点测试]
}}
===谓词===
谓词(predicate)过滤或称节点描述,通过表达式进一步筛选出满足条件的节点,表达式写在节点后面,用<code>[ ]</code>包围。
{| class="wikitable"
|-
! 谓词名称 !! 描述 !! 示例
|-
| [n] || 选择节点集中的第n个节点,从1开始计数 || <code>/bookstore/book[2]</code>选取bookstore的第二个book节点
|-
| [条件] || 根据条件选择节点,条件可以是比较、逻辑和函数 || <code>/body/div[@class]</code>选取body下带有class属性的div节点 <br /> <code>//div[@id="product5"]</code>选取所有div其中id属性为product5<br /><code>//a[contains(@class, 'product-item')]</code> 选取所有a元素,其中class属于包含product-item <br /><code>//a[contains(., '→')]/@href</code> 获取文本为→的a元素的href,即下一页标签。 <br />  <code>//book[price &gt; 50]</code> 所有book元素中price元素值大于50的元素
|-
| [position() < n] || 选择节点集中小于第n个节点的节点集 || <code>/bookstore/book[position()<3]</code>选取bookstore的前2个book节点
|-
| [last()] || 选择节点集中的最后一个节点 || <code>//book[last()]</code> <br /><code>//book[last()-1]</code></code>
|-
| [not(条件)] || 排除满足条件的节点 || <code>//book[not(@lang = 'en')]</code>
|-
| [条件1 and 条件2] || 同时满足多个条件的节点 || <code>//book[price &gt; 20 and @lang = 'en']</code>
|-
| [条件1 or 条件2] || 满足任一条件的节点 || <code>//book[price &gt; 20 or @lang = 'en']</code>
|-
| [条件1 or 条件2 and 条件3] || 使用括号确定条件的优先级 || <code>//book[(price &gt; 20 or @lang = 'en') and @available = 'yes']</code>
|}
{{了解更多
|[https://www.w3.org/TR/xpath-30/#id-predicate  W3C:XPath 3.0 - 谓词 ]
}}


==运算符==
==运算符==


==函数==
==函数==
==工具==
{| class="wikitable"
! 名称
! 描述
|-
| 复制浏览器网页某个标签xpath
| 在浏览器某个元素右键点击检测,即可打开开发者工具,在网页源代码上某个标签右键,即可选择复制xpath或完整xpath。
|-
| 浏览器输入xpath查找元素
| 方法一:按浏览器f12,打开开发者工具,在网页源代码的搜索HTML输入框输入xpath即可定位。<br /> 方法二:打开开发者工具,在控制台通过JavaScript的<code>$x('xpath路径')</code>查找,如输入<code>$x('//div')</code>
|-
|
|
|}


==资源==
==资源==
===官网===
===官网===
*W3C XPath:http://www.w3.org/TR/xpath  
*W3C XPath:http://www.w3.org/TR/xpath  
*W3C XPath 1.0:https://www.w3.org/TR/xpath-10
*W3C XPath 2.0:https://www.w3.org/TR/xpath-20
*W3C XPath 3.0:https://www.w3.org/TR/xpath-30
*W3C XPath 3.0:https://www.w3.org/TR/xpath-30


===网站===
===网站===

2023年11月2日 (四) 06:55的最新版本

XPath即为XML路径语言(XML Path Language),它是一种查询语言,用来选取XML文档中的内容。XPath是万维网联盟(W3C)标准。

简介

时间轴

  • 1999-11-16,W3C发布XPath 1.0。
  • 2010-12-14,W3C发布XPath 2.0。
  • 2014-04-08,W3C发布XPath 3.0。
  • 2017-03-21,W3C发布XPath 3.1。

版本

语法

数据模型

XPath把XML文档看作一棵树(tree),树包含很多节点(nodes),这一模式仅仅是概念性的,并不要求任何具体的实现。节点分为7种类型:

数据模型名称 描述 示例
根节点(Root Node) XML文档的顶级节点,是所有其他节点的祖先 <root> ... </root>
元素节点(Element Node) 表示XML元素的节点,可以包含其他节点 <book> ... </book>
属性节点(Attribute Node) 表示XML元素的属性的节点 <book ISBN="12345">
文本节点(Text Node) 表示XML元素内的文本内容 <title>Introduction to XPath</title>
注释节点(Comment Node) 表示XML注释的节点 <!-- This is a comment -->
处理指令节点(Processing Instruction Node) 表示XML处理指令的节点 <?xml version="1.0"?>
命名空间节点(Namespace Node) 表示XML元素的命名空间声明 xmlns:prefix="http://example.com"

了解更多 >> W3C:XPath 1.0 - 数据模型


路径表达式

路径表达式可以用于定位树中的节点。

了解更多 >> W3C:XPath 3.0 - 路径表达式


语法

轴描述

轴描述,通过XML文件分支树的浏览方向定位。

名称 描述 示例
attribute 选取元素的属性,可使用@来缩写 /bookstore/book/attribute::price
child 子节点,选取当前元素的所有子元素,可以省略不写。 /bookstore/book
/bookstore/child::text() 选取当前节点的所有文本子节点。
parent 父节点,选取当前元素的父元素,可以用 .. 来缩写 /bookstore/parent::node()
ancestor 祖先节点,选取当前元素的所有祖先元素,按层级从近到远 /bookstore/book/ancestor::bookstore
ancestor-or-self 自身及祖先节点,选取当前元素的所有祖先元素以及自身,按层级从近到远 /bookstore/book/ancestor-or-self::bookstore
following-sibling 之后同级节点,选取当前元素之后的所有同级元素 /bookstore/book/following-sibling::book
preceding-sibling 之前同级节点,选取当前元素之前的所有同级元素 /bookstore/book/preceding-sibling::book
following 下文节点,在此节点后的所有完整节点,即不包含其祖先节点 /bookstore/book/following::book
preceding 前文节点,在此节点前的所有完整节点,即不包含其子孙节点 /bookstore/book/preceding::book
descendant 选取当前元素的所有后代元素,按层级从近到远 /bookstore/descendant::book 选取当前节点的所有 book 后代。
descendant-or-self 选取当前元素的所有后代元素以及自身,按层级从近到远 /bookstore/descendant-or-self::bookstore
self 自己,选取当前元素本身,可以用 . 来缩写 /bookstore/self::bookstore
namespace 名称空间,选取元素的命名空间 /bookstore/book/namespace::*

了解更多 >> W3C:XPath 3.0 - 轴描述


节点测试

名称 描述 示例
node() 选取所有类型的节点 //node()
text() 选取文本节点 //text()
element() 选取元素节点 //element()
attribute() 选取属性节点 //attribute()
comment() 选取注释节点 //comment()
processing-instruction() 选取处理指令节点 //processing-instruction()
* 选取所有类型的节点(通配符) //*


了解更多 >> W3C:XPath 3.0 - 节点测试


谓词

谓词(predicate)过滤或称节点描述,通过表达式进一步筛选出满足条件的节点,表达式写在节点后面,用[ ]包围。

谓词名称 描述 示例
[n] 选择节点集中的第n个节点,从1开始计数 /bookstore/book[2]选取bookstore的第二个book节点
[条件] 根据条件选择节点,条件可以是比较、逻辑和函数 /body/div[@class]选取body下带有class属性的div节点
//div[@id="product5"]选取所有div其中id属性为product5
//a[contains(@class, 'product-item')] 选取所有a元素,其中class属于包含product-item
//a[contains(., '→')]/@href 获取文本为→的a元素的href,即下一页标签。
//book[price > 50] 所有book元素中price元素值大于50的元素
[position() < n] 选择节点集中小于第n个节点的节点集 /bookstore/book[position()<3]选取bookstore的前2个book节点
[last()] 选择节点集中的最后一个节点 //book[last()]
//book[last()-1]
[not(条件)] 排除满足条件的节点 //book[not(@lang = 'en')]
[条件1 and 条件2] 同时满足多个条件的节点 //book[price > 20 and @lang = 'en']
[条件1 or 条件2] 满足任一条件的节点 //book[price > 20 or @lang = 'en']
[条件1 or 条件2 and 条件3] 使用括号确定条件的优先级 //book[(price > 20 or @lang = 'en') and @available = 'yes']


了解更多 >> W3C:XPath 3.0 - 谓词


运算符

函数

工具

名称 描述
复制浏览器网页某个标签xpath 在浏览器某个元素右键点击检测,即可打开开发者工具,在网页源代码上某个标签右键,即可选择复制xpath或完整xpath。
浏览器输入xpath查找元素 方法一:按浏览器f12,打开开发者工具,在网页源代码的搜索HTML输入框输入xpath即可定位。
方法二:打开开发者工具,在控制台通过JavaScript的$x('xpath路径')查找,如输入$x('//div')

资源

官网


网站