Php 如何获得DOM节点相对于元素的深度?

Php 如何获得DOM节点相对于元素的深度?,php,dom,Php,Dom,如何获得DOM节点相对于HTML元素的深度?(这是作为子项的HTML标记,而不是文本节点) 例如: <div> // root node here is my text node // but it wont be considered in level increment <p> // level 1 <label> // level 2 here is another text node <

如何获得DOM节点相对于HTML元素的深度?(这是作为子项的HTML标记,而不是文本节点)

例如:

<div> // root node
  here is my text node // but it wont be considered in level increment
   <p> // level 1
      <label>  // level 2
             here is another text node
      </label>
   </p>
</div>

把树往上走。这样做应该可以(未经测试):

我建议:

function findNodeLevel($node) { // $node is a DOMNode 
    $xpath = explode('/', $node->getNodePath());
    return count($xpath);
}

你能告诉我如何到达任何节点的叶子,从而进一步扩展你的答案吗?你是什么意思?此函数通过将祖先树遍历回根,返回传递给它的节点的深度。不涉及叶子。它将如何处理元素?仅当子元素类型为3时,表示增加深度?您可能指的是元素类型1。此函数不必检查元素类型,因为父节点只能是元素节点。是的,我指的是类型1。我已经测试了您的函数,但在本例中它返回3,而在本例中它应该返回2:h2标记-段文本的内容结尾这里是一个粗体标记
function getDepth($node)
{
    $depth = -1;

    // Increase depth until we reach the root (root has depth 0)
    while ($node != null)
    {
        $depth++;

        // Move to parent node
        $node = $node->parentNode;
    }

    return $depth;
}
function findNodeLevel($node) { // $node is a DOMNode 
    $xpath = explode('/', $node->getNodePath());
    return count($xpath);
}