65 votes

Java: comment localiser un élément via la chaîne xpath sur org.w3c.dom.document

Comment localiser rapidement un ou plusieurs éléments via une chaîne xpath sur un org.w3c.dom.document donné? il semble n'y avoir aucune méthode FindElementsByXpath() . Par exemple

 /html/body/p/div[3]/a
 

J'ai constaté que l'itération récursive à travers tous les niveaux de nœud enfant était assez lente lorsqu'il y avait beaucoup d'éléments du même nom. Aucune suggestion?

Je ne peux utiliser ni analyseur ni bibliothèque, je ne dois travailler qu'avec le document dom W3C.

102voto

Tomasz Nurkiewicz Points 140462

Essaye ça:

 //obtain Document somehow, doesn't matter how
DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
org.w3c.dom.Document doc = b.parse(new FileInputStream("page.html"));

//Evaluate XPath against Document itself
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nodes = (NodeList)xPath.evaluate("/html/body/p/div[3]/a",
        doc.getDocumentElement(), XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); ++i) {
    Element e = (Element) nodes.item(i);
}
 

Avec le fichier page.html :

 <html>
  <head>
  </head>
  <body>
  <p>
    <div></div>
    <div></div>
    <div><a>link</a></div>
  </p>
  </body>
</html>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X