XPath怎么获取节点的深度

13次阅读

XPath无直接获取节点深度的函数,需用count(ancestor::*)+1计算(根节点深度为1);XPath2.0+可用path()辅助查看路径但不返回数值;XPath1.0仅支持前者且依赖宿主环境。

XPath怎么获取节点的深度

XPath 本身没有直接获取“节点深度”的内置函数,但可以通过计算节点到根节点的祖先数量来间接得到深度(通常根节点深度为 1 或 0,取决于定义)。

以下是几种常用且实用的方式:

count(ancestor::*) 计算相对于根的深度(从 1 开始)
这个表达式统计当前节点的所有祖先元素节点个数,再加 1 就是它在文档树中的层级深度(根元素深度 = 1):

count(ancestor::*) + 1

例如,在 xml 中, 节点的 count(ancestor::*) 是 2(),所以深度为 2 + 1 = 3

在 XPath 2.0+ 中可用 path() 辅助调试(不返回数值,但能看结构)
path() 函数(仅部分处理器支持,如 Saxon)可返回节点的路径字符串,比如 /a/b/c,可用于人工判断深度,但不能直接用于数值计算。

实际使用时注意几点

  • ancestor::* 只匹配元素节点,不包含文本、注释等,符合常规“元素深度”需求
  • 如果想包含根节点本身(即 算第 1 层),就用 count(ancestor::*) + 1
  • 若约定根深度为 0,则直接用 count(ancestor::*)
  • 在 XPath 1.0 环境(如多数浏览器 dom 查询)中,只能用 count(ancestor::*) + 1 这种方式,且必须配合支持该功能的宿主环境(如 javaScript 的 document.evaluate

基本上就这些。

text=ZqhQzanResources