2010-09-01 46 views

回答

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] { 
    } 
} 

我不知道這個函數btw。便利!感謝您提出問題。

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

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

+0

感謝您的鏈接。作者暗示它在DOMNode類上。這適合於它是DOMDocument和DOMElement的父項。 但是,文檔沒有提到getNodePath()http://www.php.net/manual/en/class.domnode.php 所以問題是一種解決。 (我應該在我的問題中說'班' - 因爲我正在努力解決這個問題)。 – 2010-09-01 11:47:30

相關問題