Использование XPath Contains против HTML в Java

Я извлекаю значения с HTML-страниц, используя XPath внутри java-программы, чтобы добраться до определенного тега, и иногда использую регулярные выражения для очистки получаемых данных.

После некоторого исследования я остановился на HTML Cleaner ( http://htmlcleaner.sourceforge.net/ ) как на наиболее надежном способе синтаксического анализа необработанного HTML в хороший формат XML. Однако HTML Cleaner поддерживает только XPath 1.0, и мне нужны такие функции, как 'contains'. например, в этом фрагменте XML:

Hello

Я хотел бы получить текст «Hello» с помощью следующего XPath:

//div/td[contains(@id, 'foo')]/text()

Есть ли способ получить эту функциональность? У меня есть несколько идей, но я бы предпочел не изобретать велосипед, если в этом нет необходимости:

  • Если есть способ вызвать HTML Cleaner evalXPath и вернуть TagNode (который я не нашел), я могу использовать Сериализатор XML для возвращенного TagNode и объединение XPath в цепочку для достижения желаемой функциональности.
  • Я мог бы использовать HTML Cleaner для очистки в XML, сериализации обратно в строку и использовать это с другой библиотекой XPath, но я не могу найти хорошего оценщика java XPath, который работал бы со строкой.
  • Используя функции TagNode, такие как getElementsByAttValue, я мог бы, по сути, воссоздать оценку XPath и вставить функциональность contains с помощью String.contains

Краткий вопрос: есть ли способ использовать XPath contains в HTML внутри существующей библиотеки Java?

21
задан Wes Iliff 26 January 2012 в 17:07
поделиться