是否有一个解析器/库,它能够读取一个HTML文档插入使用Java DOM树?我想使用标准的API DOM/Xpath
Java提供。
大多数图书馆似乎有自定义的API来解决这个任务。此外,转换HTML到XML-DOM似乎被大多数可用的解析器不支持。
任何想法或经验,具有良好的HTML DOM解析器?
由于HTML文件一般有问题的,你需要先清理它们使用的解析器/扫描器。我用JTidy但从来没有愉快。 NekoHTML工作好,但任何这些工具都始终只是做的是什么意图的最佳猜测。你实际询问,让程序修改文档的标记,直到它符合的模式。这可能会导致结构(标记),风格或内容丢失。这是不可避免的,你不会真正知道缺少了什么,除非你通过浏览器手动扫描(然后你必须得相信浏览器)。
这真的取决于你的目的 - 如果你有成千上万丑文件与外来吨(非HTML)标记,然后手动过程可能是不合理的。如果你的目标是在几个重要文档的准确性,然后手动修复他们的是一个合理的命题。
一种方法是使用所述错误消息,以最终修复损坏标记反复使所述源通过公形成和/或验证解析器,在编辑循环中的手动过程。这确实需要一些XML的理解,但是这不是一个坏的教育来承担。
随着Java 5的必要的XML功能 - 称为JAXP API - 现在已经内置到Java本身;你不需要任何外部库。
你首先获得的DocumentBuilderFactory的实例,设置它的特点,创建的DocumentBuilder(分析器),然后调用其parse()方法有一个输入源。的InputSource具有许多可能的构造的,具有在下面的示例中使用的StringReader:
import javax.xml.parsers.*;
// ...
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
dbf.setNamespaceAware(true);
dbf.setIgnoringComments(false);
dbf.setIgnoringElementContentWhitespace(false);
dbf.setExpandEntityReferences(false);
DocumentBuilder db = dbf.newDocumentBuilder();
return db.parse(new InputSource(new StringReader(source)));
这将返回一个DOM文档。如果你不介意使用外部库另外还有JDOM和XOM的API,虽然这些都在SAX和DOM API在JAXP一些优势,他们确实需要添加非Java库。该DOM可能有点麻烦,但经过这么多年的使用它,我不介意任何更长的时间。
下面是可能有用的链接。它是开源的HTML解析器的用Java Open Source HTML Parsers in Java列表
TagSoup可以做你想做的。
Apache's Xerces2 parser应该做你想要什么。
使用https://jsoup.org,这是非常简单和power.can读取和改变一个HTML。
样品:
Document doc = Jsoup.parse(page); //page can be a file or string.
Element main = doc.getElementById("MainView");
Elements links = doc.select(".link");
为创建元素可以使用j2html,https://j2html.com