Существует ряд библиотек Java для обработки ввода HTML, который не является правильно сформированным (согласно XML). В этих библиотеках также есть встроенные методы для запроса или манипулирования документом, но важно понимать, что после того, как вы проанализировали документ , обычно довольно легко обращаться с ним, как если бы он был XML в первую очередь. (используя стандартные интерфейсы Java XML). Другими словами, вам нужны только эти библиотеки для анализа искаженного ввода; другие утилиты, которые они предоставляют, в основном лишние.
Вот пример, который показывает синтаксический анализ HTML с использованием HTMLCleaner и последующее преобразование этого объекта в стандартный org.w3c.dom.Document
:
TagNode tagNode = new HtmlCleaner().clean("<html><div><p>test");
DomSerializer ser = new DomSerializer(new CleanerProperties());
org.w3c.dom.Document doc = ser.createDOM(tagNode);
В Jsoup просто проанализируйте входные данные и сериализуйте их в строку:
String text = Jsoup.parse("<html><div><p>test").outerHtml();
И преобразовать эту строку в документ W3C, используя один из методов, описанных здесь:
Теперь вы можете использовать стандартные интерфейсы JAXP для преобразования этого документа:
TransformerFactory tFact = TransformerFactory.newInstance();
Transformer transformer = tFact.newTransformer();
Source source = new DOMSource(doc);
Result result = new StreamResult(System.out);
transformer.transform(source, result);
Примечание. Предоставьте некоторый источник XSLT для tFact.newTransformer()
, чтобы сделать что-то более полезное, чем преобразование идентификаторов.