Какой объект PHP DOM имеет метод getNodePath? - PullRequest
2 голосов
/ 01 сентября 2010

Я видел примеры использования метода getNodePath () в объектах PHP DOM.

см .:

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

Однако я не могу найти документацию дляэтот метод.

Я ходил кругами в DOM Docs.

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

Есть идеи?

Ответы [ 3 ]

1 голос
/ 04 ноября 2010

Не все методы и функции описаны в руководстве по 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] {
   }
 }

Кстати, я не знал эту функцию. Handy! Спасибо за вопрос.

0 голосов
/ 01 сентября 2010

Пример, к которому вы привязали, указывает, какие объекты имеют этот метод:

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

Таким образом, экземпляры DOMDocument и DOMElement имеют метод getNodePath().Тем не менее, я не смог найти никакой документации в официальных документах PHP, но я нашел сообщение в блоге, по-видимому, разработчиком этого метода: http://blog.liip.ch/archive/2006/07/16/added-domnode-getnodepath.html

0 голосов
/ 01 сентября 2010

Вы можете создать свой собственный 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;
}
?>

Это определено здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...