Java: как найти элемент через строку xpath в org.w3c.dom.document - PullRequest
54 голосов
/ 30 июня 2011

Как быстро найти элемент / элементы через строку xpath в заданном org.w3c.dom.document? похоже, нет FindElementsByXpath() метода. Например

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

Я обнаружил, что рекурсивная итерация по всем уровням дочерних узлов довольно медленная при наличии множества элементов с одинаковыми именами. Есть предложения?

Я не могу использовать какой-либо парсер или библиотеку, должен работать только с документом w3c dom.

1 Ответ

90 голосов
/ 30 июня 2011

Попробуйте это:

//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);
}

Со следующим page.html файлом:

<html>
  <head>
  </head>
  <body>
  <p>
    <div></div>
    <div></div>
    <div><a>link</a></div>
  </p>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...