知行迭代
导航
首页
最近更改
随机页面
常用
分类目录
Linux命令
Mediawiki常用
电脑技巧
工具
链入页面
相关更改
特殊页面
页面信息
登录
查看“XPath”的源代码
←
XPath
页面
讨论
阅读
查看源代码
查看历史
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:[
[1]
]
您可以查看和复制此页面的源代码。
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种类型: {| class="wikitable" |- ! 数据模型名称 !! 描述 !! 示例 |- | 根节点(Root Node) || XML文档的顶级节点,是所有其他节点的祖先 || <code><root> ... </root></code> |- | 元素节点(Element Node) || 表示XML元素的节点,可以包含其他节点 || <code><book> ... </book></code> |- | 属性节点(Attribute Node) || 表示XML元素的属性的节点 || <code><book ISBN="12345"></code> |- | 文本节点(Text Node) || 表示XML元素内的文本内容 || <code><title>Introduction to XPath</title></code> |- | 注释节点(Comment Node) || 表示XML注释的节点 || <code><!-- This is a comment --></code> |- | 处理指令节点(Processing Instruction Node) || 表示XML处理指令的节点 || <code><?xml version="1.0"?></code> |- | 命名空间节点(Namespace Node) || 表示XML元素的命名空间声明 || <code><nowiki>xmlns:prefix="http://example.com"</nowiki></code> |} {{了解更多 |[https://www.w3.org/TR/1999/REC-xpath-19991116/#data-model W3C:XPath 1.0 - 数据模型] }} ==路径表达式== 路径表达式可以用于定位树中的节点。 {{了解更多 |[https://www.w3.org/TR/xpath-30/#id-path-expressions W3C:XPath 3.0 - 路径表达式] }} ===语法=== ===轴描述=== 轴描述,通过XML文件分支树的浏览方向定位。 {| class="wikitable" |- ! 名称 !! 描述 !! 示例 |- | attribute || 选取元素的属性,可使用<code>@</code>来缩写 || <code>/bookstore/book/attribute::price</code> |- | child || 子节点,选取当前元素的所有子元素,可以省略不写。 || <code>/bookstore/book</code> <br /><code>/bookstore/child::text()</code> 选取当前节点的所有文本子节点。 |- | parent || 父节点,选取当前元素的父元素,可以用 <code>..</code> 来缩写 || <code>/bookstore/parent::node()</code> |- | ancestor || 祖先节点,选取当前元素的所有祖先元素,按层级从近到远 || <code>/bookstore/book/ancestor::bookstore</code> |- | ancestor-or-self || 自身及祖先节点,选取当前元素的所有祖先元素以及自身,按层级从近到远 || <code>/bookstore/book/ancestor-or-self::bookstore</code> |- | following-sibling || 之后同级节点,选取当前元素之后的所有同级元素 || <code>/bookstore/book/following-sibling::book</code> |- | preceding-sibling || 之前同级节点,选取当前元素之前的所有同级元素 || <code>/bookstore/book/preceding-sibling::book</code> |- | following || 下文节点,在此节点后的所有完整节点,即不包含其祖先节点 || <code>/bookstore/book/following::book</code> |- | preceding || 前文节点,在此节点前的所有完整节点,即不包含其子孙节点 || <code>/bookstore/book/preceding::book</code> |- | descendant || 选取当前元素的所有后代元素,按层级从近到远 || <code>/bookstore/descendant::book</code> 选取当前节点的所有 book 后代。 |- | descendant-or-self || 选取当前元素的所有后代元素以及自身,按层级从近到远 || <code>/bookstore/descendant-or-self::bookstore</code> |- | self || 自己,选取当前元素本身,可以用 <code>.</code> 来缩写 || <code>/bookstore/self::bookstore</code> |- | namespace || 名称空间,选取元素的命名空间 || <code>/bookstore/book/namespace::*</code> |} {{了解更多 |[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 > 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 > 20 and @lang = 'en']</code> |- | [条件1 or 条件2] || 满足任一条件的节点 || <code>//book[price > 20 or @lang = 'en']</code> |- | [条件1 or 条件2 and 条件3] || 使用括号确定条件的优先级 || <code>//book[(price > 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 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 ===网站=== *[https://zh.wikipedia.org/wiki/XPath 维基百科:XPath] *[https://en.wikipedia.org/wiki/XPath 维基百科:XPath(英)] *[https://developer.mozilla.org/zh-CN/docs/Web/XPath MDN:XPath]
本页使用的模板:
模板:了解更多
(
查看源代码
)
返回至“
XPath
”。