#java #html #dom
#java #HTML #dom
Вопрос:
Поскольку у меня есть многопоточность, которую я не могу красноречиво решить на PHP, я хотел бы программировать на Java, к сожалению, я не смог найти библиотеку, которая позволит мне анализировать HTML DOM так же надежно, быстро и легко, как в PHP Simple HTML DOM Parser. Знаете ли вы альтернативы в Java, которые так же просты в использовании?
Ответ №1:
Я перешел с простого синтаксического анализатора HTML DOM на JSoup, и я вполне доволен этим.
Комментарии:
1. При более глубоком изучении я только что нашел этот, и он демонстрирует довольно приятный список функций и API. Поиск элементов с помощью CSS-селекторов довольно изящен.
2. На первый взгляд кажется, что функциональность JSoup даже превосходит функциональность PHP Simple HTML DOM Parser. Теперь я сравню его со вторым предложением TagSoup, есть какие-либо плюсы и минусы по этому поводу?
3. Подход с TagSoup, W3C DOM и DOM4J / JDOM должен работать, но он сложнее, чем JSoup-швы, которые должны быть. Я тоже попробую, так как проект, судя по описанию, кажется мне очень хорошим.
Ответ №2:
Я вижу, что здесь у нас есть две проблемы:
-
Синтаксический анализ HTML, который может быть неправильно оформленным XHTML, который облегчает любой и приятный для анализа. Я бы порекомендовал библиотеку TagSoup, которая может читать уродливый HTML и создавать хорошо сформированный StaX-поток, который затем можно использовать в другом месте.
-
Построение DOM-представления HTML-документа и работа с ним. Как вы, вероятно, знаете, в JDK есть полномасштабная реализация XML DOM (
org.w3c.dom.*
). Но я предполагаю, что это не тот тип API, который вы искали. Как насчет DOM4J или более старого JDOM, который может обернуть документ JDK, и вы сможете пользоваться простым в использовании API?
Комментарии:
1. Я искал вариант один, разбирающий htm, который никогда не был действительно хорошо сформирован в реальной жизни. Доступ к XML DOM с помощью XPATH действительно сложен, и я просто не смог создать пуленепробиваемый код. TagSoup кажется хорошим предложением, теперь вопрос в том, что мне больше подходит JSoup или TagSoup.
Ответ №3:
Я успешно использовал TagSoup в качестве анализатора SAX для заполнения документов DOM4J, которые я затем запрашиваю с помощью XPath. Мне потребовалось некоторое время, чтобы разобраться с заклинаниями — (Scala, но я уверен, что вы можете преобразовать):
parserFactory = new org.ccil.cowan.tagsoup.jaxp.SAXFactoryImpl
val reader = new SAXReader(parserFactory.newSAXParser.getXMLReader)
val doc = reader.read(new InputSource(new StringReader(page)))