我已经看到了在PHP DOM对象上使用getNodePath()方法的示例。
请参阅:
http://www.php.net/manual/en/class.domdocument.php#91072
但是我找不到该方法的文档。
我一直在围绕DOM Docs。
http://www.php.net/manual/en/book.dom.php
有什么想法吗?
答案 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() ...
...
因此,DOMDocument
和DOMElement
个实例具有getNodePath()
方法。但是,我无法在官方PHP文档中找到任何文档,但我发现该方法的实现者显然有一篇博文:http://blog.liip.ch/archive/2006/07/16/added-domnode-getnodepath.html