使用Java中的兄弟标记解析HTML内容(或)在两个<open>标记之间查找内容</open>

时间:2011-08-29 01:38:13

标签: java html parsing nested htmlcleaner

背景:我正在编写一个Java程序来浏览HTML文件,并用Lorem Ipsum替换非<script><style>的标签中的所有内容。我最初使用正则表达式执行此操作只是删除&gt;之间的所有内容。和一个&lt;,它实际上运作得很好(我知道亵渎神明),但我试图把它变成一个其他人可能会觉得有用的工具,所以我不敢通过试图使用正则表达式来威胁宇宙的神圣性在html上。

我正在尝试使用HtmlCleaner,这是一个吸引我的Java库,因为它没有其他依赖项。但是,尝试实现它我一直无法处理这样的HTML:

<div>
    This text is in the div <span>but this is also in a span.</span>
</div>

问题很简单。当TagNodeVisitor到达div时,如果我用适量的lipsum替换它的内容,它将消除span标记。但是,如果我只向下钻取没有其他孩子的TagNodes,我会错过第一个文本。

HtmlCleaner有一个ContentNode对象,但该对象没有替换方法。我能想到的任何事情似乎都要过于复杂。是否有人熟悉处理此问题的方法,使用HtmlCleaner或其他一些您更熟悉的解析库?

2 个答案:

答案 0 :(得分:0)

你几乎可以用JSoup setters

做任何你想做的事情

这适合你吗?

 Element div = doc.select("div").first(); // <div></div>
 div.html("<p>lorem ipsum</p>"); // <div><p>lorem ipsum</p></div>

答案 1 :(得分:0)

HtmlCleaner的ContentNode有一个返回getContent()的方法java.lang.StringBuilder。这是可变的,可以更改为您想要的任何值。