2010-04-15 5 views
3

Je crée un document XML à la volée. et j'ai besoin de connaître le XPath du nœud que je viens de créer. Je ne vois pas une telle fonction comme DOMNode::calculateXPath(void):string et je ne suis pas disposé à écrire un par moi-même. est-il connu lite Solution de tiers?PHP Obtenir XPath d'un DOMNode

Répondre

2

Il n'y a pas de XPath défini pour un noeud donné, car XPath est une requête de recherche. Comme dans google, vous pouvez trouver une page spécifique en utilisant différents termes de recherche. De plus, la requête XPath retournant le noeud courant peut (changera probablement) lorsque vous modifiez l'arborescence DOM, donc le chemin que vous pouvez obtenir n'est valide que jusqu'à ce que la prochaine modification de l'arbre soit faite. Vous pouvez donner à chacun de vos nœuds un identifiant ou un nom de classe unique (la classe est plus sûre lorsque vous souhaitez utiliser d'autres ID - il peut y avoir plusieurs classes et un seul ID). Ensuite, vous pouvez rechercher en utilisant cette classe/id.

Exemple pour la balise span et unique_1_ de classe:

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

Il y avait une question similaire il y a un certain temps, pour lequel je posté quelque chose le long de ces lignes:

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; 
} 

Comme mentionné par Tomasz si, il n'est certainement pas aussi robuste ou futur-preuve que l'utilisation d'ID.

+0

je pouvais le faire en utilisant ID.rather ma version actuelle est effectuée à l'aide ID. Plutôt j'étais à la recherche de quelque chose d'autre. J'ai fait un fil différent pour cela http://stackoverflow.com/questions/2644163/php-domxml-xpath-of-recursive-xpointer –