XPath 语法入门

2025-12-13 08:40:44 生存指南

XPath 语法入门

什么是 XPath?

XPath(XML Path Language) 是一种用于在 XML 文档中定位节点的语言。它可以用来选择 XML 文档中的元素、属性、文本内容等。此外,XPath 还支持通过条件筛选节点,并且可以结合函数和运算符进行复杂的查询操作。

虽然 XPath 最初是为处理 XML 设计的,但它也被广泛应用于 HTML 文档(如在 Selenium 中用于定位网页元素)。掌握 XPath 的基本语法,能够帮助你高效地提取数据或操作文档。

XPath 的核心概念

1. 节点选择

XPath 可以选择 XML 或 HTML 文档中的节点。常见的节点类型包括:

元素节点:如 。属性节点:如 <book id="123"> 中的 id 属性。文本节点:如 <title>XML Tutorial 中的 XML Tutorial。

2. 轴(Axis)

轴用于指定节点的选择范围。常见的轴包括:

child:::选择当前节点的所有子节点。parent:::选择当前节点的父节点。descendant:::选择当前节点的所有后代节点。self:::选择当前节点本身。

3. 谓词(Predicate)

谓词用于筛选符合条件的节点。它使用方括号 [] 包裹,并可以包含条件表达式。

4. 通配符和函数

XPath 提供了多种通配符(如 * 表示任意元素)和内置函数(如 contains()、text() 等),用于增强查询能力。

XPath 的基本语法

1. 选择元素节点

使用元素名称直接选择节点:

/books/book

上述表达式表示从根节点 /books 下选择所有 元素。

示例 XML 文档:

XML Tutorial

50.00

HTML Guide

30.00

示例:选择所有 元素

/books/book

结果会返回文档中所有的 节点。

2. 使用轴

默认情况下,XPath 使用 child:: 轴选择子节点。以下是一些常见的轴示例:

示例:使用 parent:: 轴

/books/book/parent::

上述表达式返回 元素的父节点(即 )。

示例:使用 descendant:: 轴

/books/descendant::price

返回 下所有后代节点中的 元素。

3. 谓词筛选

谓词用于根据条件筛选节点。常见的谓词包括:

筛选特定的元素(如 position())。使用比较运算符(=, >, <, >=, <=)。使用逻辑运算符(and, or)。

示例:筛选价格大于 40 的书籍

/books/book[price > 40]

返回所有 元素中,子元素 的值大于 40 的节点。

示例:使用 position() 筛选第一个

/books/book[position() = 1]

返回第一个 节点。

4. 属性选择

要选择某个元素的属性,可以使用 @ 符号:

/books/book/@id

上述表达式返回所有 元素的 id 属性值。

示例:筛选 id 为 1 的书籍

/books/book[@id = '1']

5. 文本内容选择

要提取某个元素的文本内容,可以使用 text() 函数:

/books/book/title/text()

上述表达式返回所有 元素中的文本内容。</p> <p>示例:筛选标题包含 “XML” 的书籍</p> <p>/books/book[title[contains(text(), 'XML')]]</p> <p>6. 通配符和函数</p> <p>XPath 提供了多种通配符和内置函数,用于增强查询能力。</p> <p>常见的通配符:</p> <p>*:匹配任意元素。@*:匹配任意属性。</p> <p>示例:选择所有 <book> 的子节点</p> <p>/books/book/*</p> <p>常见的函数:</p> <p>contains():判断文本是否包含某个子串。starts-with():判断文本是否以某个字符串开头。concat():拼接字符串。position():返回当前节点的位置。</p> <p>XPath 的应用场景</p> <p>1. 数据提取</p> <p>XPath 常用于从 XML 或 HTML 文档中提取数据。例如:</p> <p>//table/tr/td[2]</p> <p>上述表达式可以用于提取网页表格中的第二列数据。</p> <p>2. 自动化测试(如 Selenium)</p> <p>在自动化测试中,XPath 可以用来定位网页元素。例如:</p> <p>//*[@id='login-button']</p> <p>上述表达式定位 id 属性为 login-button 的按钮。</p> <p>3. XML 文档处理</p> <p>XPath 是处理 XML 文档的首选语言之一。例如:</p> <p>/books/book[price > 40]</p> <p>上述表达式筛选价格大于 40 的书籍。</p> <p>常见问题与技巧</p> <p>1. 如何处理重复节点?</p> <p>如果需要选择某个特定的节点,可以使用 position() 函数。例如:</p> <p>/books/book[position() = 2]</p> <p>2. 如何忽略大小写?</p> <p>XPath 不区分大小写,默认情况下会将文本按原样匹配。可以通过转换函数(如 lower-case())处理。</p> <p>示例:不区分大小写的筛选</p> <p>//title[contains(lower-case(text()), 'xml')]</p> <p>3. 如何避免过度具体化?</p> <p>编写 XPath 表达式时,尽量保持简洁,避免过度依赖路径。例如:</p> <p>//*[contains(@id, 'login')]</p> <p>上述表达式选择任意 id 属性中包含 login 的元素。</p> <p>总结</p> <p>通过本文的学习,你应该掌握了 XPath 的基本语法和核心概念,包括节点选择、轴、谓词、属性选择以及函数的使用。这些知识将帮助你高效地处理 XML 文档或提取网页数据。如果你希望进一步深入学习,可以尝试结合实际项目进行练习,例如在自动化测试中编写更复杂的 XPath 表达式。</p> <p>参考资料</p> <p>XPath TutorialSelenium with XPath</p> </p> <div style="text-align: left;background:#f1f1f1;padding:20px;line-height:50px;"> <a href="/eeffbcee1de42efb/8dddf4aebd276ea8.html">五苓散,不只是利尿那么简单</a><br><a href="/eeffbcee1de42efb/b890fd88aa3c6a39.html">联通流量卡通用定向区别,2025联通流量卡避坑指南</a> </div> <div id="fengexian"></div> </dd> </dl></div> </div> <div class="content-right"> <dl class="function" id="newmodule"> <dt class="function_t">最新发表</dt><dd class="function_c"> <ul> <li><a title="2025年大树村历险记春季探险活动盛大开启" href="/bf39c7c47dc6f2ef/d2dca0b92f933660.html">2025年大树村历险记春季探险活动盛大开启</a></li> <li><a title="[其他]补丁制作Tips:2025.3.27 DNF官方更新后新增NPK文件明细" href="/bf39c7c47dc6f2ef/75bc563f339b9a28.html">[其他]补丁制作Tips:2025.3.27 DNF官方更新后新增NPK文件明细</a></li> <li><a title="吴京代言的传奇手游有哪些?这些游戏怎么玩?" href="/bf39c7c47dc6f2ef/f8d3ae229c23385c.html">吴京代言的传奇手游有哪些?这些游戏怎么玩?</a></li> <li><a title="凡人飞仙传:2025年春季修仙大典,飞升之路等你来挑战!" href="/eeffbcee1de42efb/673078614af8eaaa.html">凡人飞仙传:2025年春季修仙大典,飞升之路等你来挑战!</a></li> <li><a title="特攻纪元:2025春季全球挑战赛,争夺终极荣耀!" href="/108692dffcdd9067/40433262f7992839.html">特攻纪元:2025春季全球挑战赛,争夺终极荣耀!</a></li> <li><a title="精灵快点跑:冒险岛大闯关" href="/eeffbcee1de42efb/fe35c75e61422c15.html">精灵快点跑:冒险岛大闯关</a></li> <li><a title="《勇士与梦想大陆》2025春季勇士集结大作战" href="/bf39c7c47dc6f2ef/ff82a88a4733e8e6.html">《勇士与梦想大陆》2025春季勇士集结大作战</a></li> <li><a title="眼纹/眼球/虹膜识别差哪儿了?" href="/eeffbcee1de42efb/0f2652560c12b528.html">眼纹/眼球/虹膜识别差哪儿了?</a></li> <li><a title="东方见闻录2025夏季探险之旅:神秘岛屿的传说与宝藏" href="/bf39c7c47dc6f2ef/b93a23b9cfee28a7.html">东方见闻录2025夏季探险之旅:神秘岛屿的传说与宝藏</a></li> <li><a title="如何提升WiFi速度" href="/108692dffcdd9067/7b0173014636902f.html">如何提升WiFi速度</a></li> </ul> </dd> </dl> <dl class="function" id="newmodule"> <dt class="function_t">友情链接</dt><dd class="function_c"> <div><script> var _mtj = _mtj || []; (function () { var mtj = document.createElement("script"); mtj.src = "https://node91.aizhantj.com:21233/tjjs/?k=gdvpk3plqch"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(mtj, s); })(); </script></div> </dd> </dl></div> </div> <div class="clear"></div> <div id="foot"> <div class="f-info"> <p> <span style="float:left"> 友情链接:<script> var _mtj = _mtj || []; (function () { var mtj = document.createElement("script"); mtj.src = "https://node91.aizhantj.com:21233/tjjs/?k=gdvpk3plqch"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(mtj, s); })(); </script><br><br> Copyright © 2022 惊心农械末日战场 All Rights Reserved.</span></p> </div> <div class="clear"></div> </div> <script type="text/javascript" src="/static/js/san_praise_sdk.js"></script> </body> </html>