Xpath 如何获得html树的最大深度?

Xpath 如何获得html树的最大深度?,xpath,tree,Xpath,Tree,假设我有一个通过Nokogiri解析的html页面 如何找到树的最大深度?我是否遍历每个元素并计算它有多少祖先?有更有效的方法吗?您必须接触每个元素,但不要将父元素视为第二个操作,而是将其作为迭代的一部分 每次下降一个标高时,增加一个深度变量 当你上升一个级别时,将你当前的深度与保存的“deep”变量进行比较。如果较大,则替换“deep”变量 当然,当你上升一个级别时,你也会减少深度变量 这可以很容易地用一个递归方法在功能上编写,该方法接受节点并返回最深的值 int maxDepth(Node

假设我有一个通过Nokogiri解析的html页面


如何找到树的最大深度?我是否遍历每个元素并计算它有多少祖先?有更有效的方法吗?

您必须接触每个元素,但不要将父元素视为第二个操作,而是将其作为迭代的一部分

每次下降一个标高时,增加一个深度变量

当你上升一个级别时,将你当前的深度与保存的“deep”变量进行比较。如果较大,则替换“deep”变量

当然,当你上升一个级别时,你也会减少深度变量

这可以很容易地用一个递归方法在功能上编写,该方法接受节点并返回最深的值

int maxDepth(Node node)
    int max=0;
    for each child of node
        thisMax=maxDepth(child)
        if(max < thisMax)
            max=thisMax
    return max+1
int-maxDepth(节点)
int max=0;
对于节点的每个子节点
thisMax=最大深度(子级)
如果(最大值<此最大值)
最大值=此最大值
返回最大值+1

(这是一种罕见的情况,您可以编写递归函数而无需分离终止子句)

正如Bill K所说,您需要自己进行一些搜索。您可以通过只查看叶节点(即具有空子轴的节点)来减少搜索集:

//*[count(child::*) = 0]
然后可以迭代该表达式返回的所有节点并执行以下操作

count(ancestor::*)
。。。并找到达到最大值的节点