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
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_')]
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.
Je sais que c'est un peu vieux, mais j'ajoute ceci juste au cas où quelqu'un d'autre le cherche.
Depuis PHP 5.2, il y a DomNode::getNodePath()
dans lequel s'étend DomElement
.
- 1. Comment obtenir innerHTML de DOMNode?
- 2. entités PHP DOMNode et nodeValue
- 3. En PHP, comment puis-je obtenir le XML externe à partir d'un DOMNode?
- 4. Qu'est-ce qui causerait que DOMNode :: nodeValue soit vide?
- 5. Xpath php liens
- 6. php XPath sur XML
- 7. PHP SimpleXML avec XPath
- 8. Requête php xpath et résultat xpath
- 9. PHP XPath: Comment obtenir le contenu de l'élément?
- 10. Problème avec Xpath PHP
- 11. PHP XPATH Mind Melt
- 12. PHP SimpleXML et XPath
- 13. PHP Xpath help
- 14. XPath pour obtenir l'ID maximale
- 15. Selenium obtenir ID dynamique XPath
- 16. XPATH/PHP problème avec last()
- 17. XPath résultat à l'objet PHP
- 18. ajoutant variable php dans Xpath
- 19. Aller directement à SimpleXMLElement sans XPath php
- 20. Obtenir certaine valeur d'attribut à l'aide XPath
- 21. obtenir le noeud ancêtre xpath commun?
- 22. Comment obtenir uniquement les éléments xpath requis?
- 23. Requête XPath pour obtenir le bon élément
- 24. simple expression XPath pour obtenir des attributs
- 25. XPATH Query: Comment obtenir deux éléments?
- 26. Comment obtenir nœuds à l'aide XPath
- 27. Comment utiliser XPath pour obtenir des éléments?
- 28. XPath pour obtenir les noms d'éléments uniques
- 29. Comment obtenir le type d'élément dans xpath?
- 30. XML avec l'analyse d'un Xpath en PHP
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 –