XPath中用position() mod 2判断节点奇偶:加括号(//Xxx)[...]实现全文统一编号,不加则按父节点内独立计数;position()从1开始,奇数为mod 2 = 1,XPath 1.0必须用mod而非%。

XPath 中可以通过 position() 函数配合取模运算(mod)来选择位置为奇数或偶数的节点,但要注意:**position() 是相对当前上下文节点列表的位置,不是全局文档序号**,且只在谓词(方括号 [])中有效。
使用 position() mod 2 = 1:
//div/p[position() mod 2 = 1] → 选中每个 <div> 下的第 1、3、5… 个 <code><p></p>
<li>
(//li)[position() mod 2 = 1] → 注意括号!先取全部 <li> 节点为一个序列,再取其中奇数位(整个文档中第 1、3、5… 个 <li>)
用 position() mod 2 = 0:
//tr/td[position() mod 2 = 0] → 每行中第 2、4、6… 个单元格
<li>
(//item)[position() mod 2 = 0] → 整个文档中所有 <item></item> 的第 2、4、6… 个
⚠️ 注意以下几点,避免结果不符合预期:
//div/p[position() mod 2 = 1] 是「每个 内部独立计数」,不是全文统一编号
<li>想按全文顺序筛选,必须先用括号生成完整节点集:(//Xxx)[...]
<li>position() 从 1 开始计数(不是 0),所以奇数是 mod 2 = 1,不是 = 0
<li>在 XPath 1.0(主流浏览器和多数库默认)中,不支持 % 符号,必须用 mod
实用小技巧:隔行变色或抽样提取
例如给表格奇数行加样式(CSS 不适用,但可用于 XSLT 或爬虫逻辑):
<li>XPath 提取奇数行内容:(//table//tr)[position() mod 2 = 1]/td[1]/text()
<li>跳过第一行(表头),取后续奇数行(即第 3、5、7… 行):(//tr)[position() > 1 and position() mod 2 = 0]
基本上就这些。核心就是括号控制作用域 + position() mod 2 判断奇偶,不复杂但容易忽略括号的影响。
以上就是XPath怎么选择在文档中位置为奇数或偶数的节点的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号