7
votes

XPath / HTML: Sélectionnez le nœud basé sur le nœud associé

/html/body/table/tr/td[count(/html/body/table/tr/th[text() = 'HeaderA']/preceding-sibling::*)+1]

0 commentaires

4 Réponses :


1
votes

J'aurais quitté Xpath de côté ... Depuis que je suppose que c'était Dom analysé, j'utiliserais une structure de données cartographique et correspond aux nœuds du côté client ou du côté serveur (JavaScript / Java) manuellement.

Il me semble que XPath est en train d'être strié au-delà de sa limite ici.


2 commentaires

Je pense toujours que XPath n'est pas la meilleure solution ici, le vote ne changera pas mon esprit ... ou les faits ...


Je comprends et apprécions votre commentaire .. Ce que je cherche, c'est la méthode la plus efficace utilisant XPath .. Je peux ensuite effectuer des repères du monde réel dans mon environnement en utilisant toutes les options disponibles (XPATH, Java, JavaScript, etc.) pour vous installer sur Une solution finale .. Merci pour votre commentaire ..



3
votes
  • Il est possible d'utiliser des chemins relatifs à l'intérieur Count () Code> Li>
  • Je n'ai jamais entendu parler d'une autre façon de trouver le numéro de nœud ... Li>

    Voici le code avec le code XPath relative INTÉGNEMENT () P>

    //td[count(../..//th[text()='HeaderC']/preceding-sibling::*)+1]
    

1 commentaires

Excellent .. Je ne cherche pas tellement le moyen le plus court pour écrire l'expression .. mais le plus efficace, afin de minimiser les recherches internes.



0
votes

Peut-être que vous voulez des axes de position () et XPath?


0 commentaires

2
votes

La réponse de Harnen est exactement ce dont vous avez besoin pour une solution pure XPath.

Si vous êtes vraiment préoccupé par la performance , vous pourriez définir un clé XSLT : xxx

puis utilisez la touche dans votre filtre de prédicat: xxx

Cependant, je soupçonne que vous ne pourrez probablement pas voir un mesurable différence de performance sauf si vous devez filtrer sur des colonnes beaucoup (par exemple, pour chacune des avec des chèques pour chaque rangée pour un très grand document).


0 commentaires