web-dev-qa-db-fra.com

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

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

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

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

Je ne peux utiliser aucun analyseur ou bibliothèque, je dois travailler avec le document dom w3c uniquement.

55
KJW

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, XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); ++i) {
    Element e = (Element) nodes.item(i);
}

Avec le page.html fichier:

<html>
  <head>
  </head>
  <body>
  <p>
    <div></div>
    <div></div>
    <div><a>link</a></div>
  </p>
  </body>
</html>
91
Tomasz Nurkiewicz