9
votes

Quelle est la meilleure façon d'identifier de manière unique un nœud DOM?

Qu'est-ce qu'un moyen d'identifier de manière unique tous les nœuds DOM dans un document HTML. Pour illustrer ce que je veux dire, voici un exemple (fictif):

  • Script x x sélectionne au hasard un nœud DOM à partir de document.html.
  • Script X doit indiquer script Y quel nœud Dom il a choisi.
  • Comment script x identifie de manière unique le nœud DOM qu'il a choisi de sorte que le script Y sait exactement quel nœud il est dans le document.html?

    Je suis vraiment intéressé par la manière d'identifier de manière unique le nœud DOM afin que le script Y puisse l'identifier et le manipuler. De préférence, il devrait également fonctionner avec des nœuds de texte. Je pensais à XPathe peut-être, mais je ne sais pas comment générer un xpath unique à un nœud donné.


0 commentaires

4 Réponses :


0
votes

Eh bien, une expression XPath qui donne un seul noeud doit être unique. Qu'entendez-vous par «Comment générer un XPath unique à tout nœud donné»?


1 commentaires

Juste, mais je le fais en sens inverse: je sais quel nœud je suis à ce jour, mais pas comment y arriver;) La réponse de Brian semble bien cependant bien.



6
votes

Vous devriez être capable de déterminer un XPath unique en fonctionnant à l'envers du nœud au nœud racine et en suivant le nœud que vous êtes sur lequel vous êtes sur lequel vous êtes, tel que vous obtenez quelque chose comme:

/a[1]/b[2]/c[101]/text()


4 commentaires

Les implémentations XPath sont disponibles dans la plupart des langues. Sur la ligne de commande, vous pouvez utiliser un outil de ligne de commande appelé xmlstarlet (juste Google pour cela)


Exactement ce que je cherchais! Et si mon code ressemblait à ceci:

Bonjour Cher Monde . Comment puis-je identifier le nœud "monde". Est-ce que je ferais quelque chose comme ça? / div [0] / p [0] / texte [1]?


Oui. Mais XPath est basé sur 1, pas à 0


Soyez prudent des nœuds de texte non coalescés, qui ne peuvent être identifiés purement avec XPath.



0
votes

Positions d'enfants ordinales le long des axes XPath. Les nœuds sont fortement commandés et disant ainsi:

Enfant 1 de l'enfant 3 de l'enfant 4 de l'enfant 5.

devrait le faire.


0 commentaires

1
votes

Vous voudrez peut-être jeter un coup d'œil sur xpathgen https://github.com/amouat/xpathgen

Il créera un XPATH unique du formulaire / noeud () [1] / noeud () [1] pour un nœud DOM donné. Cependant, il existe des problèmes avec XPath, à savoir les nœuds de texte non coalescés et les nœuds "PROGolog", qui ne peuvent être identifiés de manière unique purement avec XPath. Par exemple, si vous avez le document suivant dans DOM: xxx

et ajoutez un nœud texte à devenir: xxx

le XPath aux nœuds B et C sera le même, mais vous aurez toujours des nœuds DOM distincts (sauf si vous appelez Normaliser sur le document). Si vous devez gérer cette situation, vous devrez stocker des compensations et des longueurs pour les nœuds de texte.


0 commentaires