Обработка узла JTidy - PullRequest
1 голос
/ 31 мая 2011

Я использую JTidy для анализа данных веб-страницы. Мой вопрос следующий:

Можно ли вызвать метод XPath.evalate на ранее найденном узле?

Я объясню лучше. Обычно вы используете вызов метода xmlPath.evaluate (pattern, document, XPathConstants.NODE) ​​ для получения списка узлов, соответствующих вашему выражению xpath.

Как только я получил узел или nodeList, как я могу выполнить xmlPath.evaluate, начиная с предыдущего извлеченного узла , что-то похожее на xmlPath.evaluate (шаблон, узел , XPathConstants.NODE) ​​

1 Ответ

2 голосов
/ 31 мая 2011

Да, я думаю, что это возможно:

URL url = new URL("http://www.w3.org");

// configure JTidy
Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.setQuiet(true);
tidy.setXmlOut(true);
tidy.setShowWarnings(false);

Document doc = tidy.parseDOM(url.openConnection().getInputStream(), null);
XPath xpath = XPathFactory.newInstance().newXPath();

XPathExpression expr =
xpath.compile("//form[@action = 'http://www.w3.org/Help/search']");

Node form = (Node) expr.evaluate(doc, XPathConstants.NODE);

// create relative XPath    
expr = xpath.compile("ul/li[@class = 'last-item']/a");
Node lastItem = (Node) expr.evaluate(form, XPathConstants.NODE);

System.out.println(lastItem.getFirstChild().getNodeValue());

Возвращает:

About W3C
...