Я собираю значения со страниц HTML, используя XPath внутри java-программы, чтобы добраться до определенного тега, и иногда использую регулярные выражения для очистки данных, которые я получаю.
После некоторых исследований я остановился на HTML Cleaner (http://htmlcleaner.sourceforge.net/) как на самом надежном способе анализа необработанного HTML в хорошем формате XML. HTML Cleaner, однако, поддерживает только XPath 1.0, и я чувствую, что нуждаюсь в таких функциях, как «contains». например, в этом фрагменте XML:
<div>
<td id='1234 foo 5678'>Hello</td>
</div>
Я бы хотел получить текст «Hello» со следующим XPath:
//div/td[contains(@id, 'foo')]/text()
Есть ли способ получить эту функциональность? У меня есть несколько идей, но я бы предпочел не изобретать велосипед, если мне не нужно:
- Если есть способ вызвать метод оценки HTML Cleaner и использовать тег TagNode (который я не нашел), я могу использовать сериализатор XML на возвращенном теге TagNode и соединить вместе XPath для достижения желаемой функциональности.
- Я мог бы использовать HTML Cleaner для очистки в XML, сериализовать его обратно в строку и использовать его с другой библиотекой XPath, но я не могу найти хорошего оценщика Java XPath, который работает со строкой.
- Используя функции TagNode, такие как getElementsByAttValue, я мог бы по существу воссоздать оценку XPath и вставить в нее функцию с использованием String.contains
Короткий вопрос: есть ли способ использовать XPath, содержащийся в HTML внутри существующей библиотеки Java?