2010-04-15 42 views
3

我正在創建一個XML文檔。我需要知道剛剛創建的節點的XPath。 我沒有看到像DOMNode::calculateXPath(void):string 這樣的功能,我不願意自己寫一個。有沒有任何已知的lite第三方解決方案?PHP獲取DOMNode的XPath

回答

2

給定節點沒有確定的XPath,因爲XPath是一個搜索查詢。像谷歌一樣,您可以使用不同的搜索詞找到特定的頁面。更重要的是,當您修改DOM樹時,返回當前節點的XPath查詢可能會(可能會)發生更改,所以您可以獲得的路徑僅在下一次樹修改完成之前有效。

您可以爲每個節點分配唯一的ID或類名(當您想使用其他ID時,類可以更安全 - 可以有多個類並且只有一個ID)。然後你可以使用這個class/id進行搜索。

例標籤span和類unique_1_:

//span[contains(@class, 'unique_1_')] 
3

也有類似的問題前一段時間,爲此我張貼類似的規定:

function calculateXPath(DOMNode $node) 
{ 
    $q  = new DOMXPath($node->ownerDocument); 
    $xpath = ''; 

    do 
    { 
     $position = 1 + $q->query('preceding-sibling::*[name()="' . $node->nodeName . '"]', $node)->length; 
     $xpath = '/' . $node->nodeName . '[' . $position . ']' . $xpath; 
     $node  = $node->parentNode; 
    } 
    while (!$node instanceof DOMDocument); 

    return $xpath; 
} 

正如托馬斯雖然提到,它絕對不如使用身份證明那樣健壯或有利於未來。

+0

我可以做到這一點使用ID.rather我目前使用的版本號已經完成。相反,我在尋找別的東西。我做了一個不同的線程http://stackoverflow.com/questions/2644163/php-domxml-xpath-of-recursive-xpointer – 2010-04-15 09:42:15