我已經看到PHP DOM對象上使用getNodePath()方法的例子。哪個PHP DOM對象具有getNodePath方法?
看到:
http://www.php.net/manual/en/class.domdocument.php#91072
但是我無法找到該方法的文檔。
我一直在DOM Docs中圈出。
http://www.php.net/manual/en/book.dom.php
任何想法?
我已經看到PHP DOM對象上使用getNodePath()方法的例子。哪個PHP DOM對象具有getNodePath方法?
看到:
http://www.php.net/manual/en/class.domdocument.php#91072
但是我無法找到該方法的文檔。
我一直在DOM Docs中圈出。
http://www.php.net/manual/en/book.dom.php
任何想法?
並非每種方法和函數都記錄在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] {
}
}
我不知道這個函數btw。便利!感謝您提出問題。
您可以創建自己的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。
您鏈接到的例子表示哪些對象具有以下方法:
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
感謝您的鏈接。作者暗示它在DOMNode類上。這適合於它是DOMDocument和DOMElement的父項。 但是,文檔沒有提到getNodePath()http://www.php.net/manual/en/class.domnode.php 所以問題是一種解決。 (我應該在我的問題中說'班' - 因爲我正在努力解決這個問題)。 – 2010-09-01 11:47:30