对java HTML解析器/编辑器的建议

时间:2009-04-02 10:45:07

标签: java html parsing

在尝试使用第三方HTML编辑器执行(我希望)操作简单的问题后,我遇到了问题。由于这些问题,我正在寻找可用于执行操作的替代HTML解析器的建议。

这是我的情况,我的html中有span标签(带有ID属性来识别它们),我只想根据客户端另一个区域的更新来替换它们的内容。例如:

<html>
    <body>
        <p>Hello <span id="1">name</span> you are <span id="2">age</span></p>
    </body>
</html>

我一直在尝试使用HTMLDocument这样的javax.swing.text类:

Element e;
e = doc.getElement(document.getDefaultRootElement(), Attribute.ID, "1");
document.setInnerHTML(element, "John");
e = doc.getElement(document.getDefaultRootElement(), Attribute.ID, "2");
document.setInnerHTML(element, "99");

但返回的元素是一个叶元素,不允许设置innerHTML。不幸的是,该文件,读者和解析器全部由第三方提供。所以我无法真正修改它。

所以,我希望的是其他人遇到过类似的问题,可以推荐一个替代库来做这个吗?

提前致谢,B。

5 个答案:

答案 0 :(得分:2)

你真的不能用java.swing.text.HTMLDocument来实现吗?

我从来没有尝试过这个,而是通过API读取

的内容
document.replace(e.getStartOffset(), e.getEndOffset()-e.getStartOffset(), "John", null)

而不是使用setInnerHtml()可以工作。

答案 1 :(得分:0)

你试过HTML Parser吗?它是一个强大的Java开源HTML解析库。

答案 2 :(得分:0)

HTMLParser是一个很棒的库,但它是LGPL,可能不适合某些商业项目。

如果您的html格式正确,那么您可以进入Dom4J遍历节点,如果您的HTML格式不正确,您可以将Tidy与Dom4J结合使用

答案 3 :(得分:0)

我在TagSoup的当前项目上好运。

答案 4 :(得分:0)

我非常成功地使用了JTidy。它接收HTML,删除垃圾,所以你有一个合适的DOM对象,然后只需使用XPath来改变你的目标。