哪个PHP DOM对象有getNodePath方法?

时间:2010-09-01 05:52:42

标签: php dom

我已经看到了在PHP DOM对象上使用getNodePath()方法的示例。

请参阅:

http://www.php.net/manual/en/class.domdocument.php#91072

但是我找不到该方法的文档。

我一直在围绕DOM Docs。

http://www.php.net/manual/en/book.dom.php

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

并非所有方法和功能都记录在PHP手册中。如果要查找类的方法,可以使用Reflection。 <或者

ReflectionClass::export('DOMNode');

或从命令行:

$ php --rc DOMNode

应该给出类似的东西:

Class [ <internal:dom> class DOMNode ] {

   // ... lots of other stuff ...

    Method [ <internal:dom> public method getNodePath ] {

      - Parameters [0] {
      }
    }

   // ... lots of other stuff ...
}

如果您为DOMDocument执行此操作,它会告诉您它的继承地址:

 Method [ <internal:dom, inherits DOMNode> public method getNodePath ] {

   - Parameters [0] {
   }
 }

我不知道这个功能顺便说一句。便利!谢谢你提问。

答案 1 :(得分:0)

您可以像这样创建自己的getNodeXPath()

<?php
/**
* result sample : /html[1]/body[1]/span[1]/fieldset[1]/div[1]
* @return string
*/
function getNodeXPath( $node ) {    
    $result='';
    while ($parentNode = $node->parentNode) {
        $nodeIndex=-1;
        $nodeTagIndex=0;
        do {
            $nodeIndex++;
            $testNode = $parentNode->childNodes->item( $nodeIndex );

            if ($testNode->nodeName==$node->nodeName and $testNode->parentNode->isSameNode($node->parentNode) and $testNode->childNodes->length>0) {
                //echo "{$testNode->parentNode->nodeName}-{$testNode->nodeName}-{}<br/>";
                $nodeTagIndex++;
            }

        } while (!$node->isSameNode($testNode));

        $result="/{$node->nodeName}[{$nodeTagIndex}]".$result;
        $node=$parentNode;
    };
    return $result;
}
?>

这已定义为here

答案 2 :(得分:0)

您链接的示例表示哪些对象具有此方法:

        case ($obj instanceof DOMDocument):
            ... $obj->getNodePath() ...
            ...
        case ($obj instanceof DOMElement):
            ... $obj->getNodePath() ...
            ...

因此,DOMDocumentDOMElement个实例具有getNodePath()方法。但是,我无法在官方PHP文档中找到任何文档,但我发现该方法的实现者显然有一篇博文:http://blog.liip.ch/archive/2006/07/16/added-domnode-getnodepath.html