【发布时间】:2011-08-29 01:38:12
【问题描述】:
背景:我正在编写一个 Java 程序来遍历 HTML 文件并用 Lorem Ipsum 替换标签中不是<script> 或<style> 的所有内容。我最初使用正则表达式执行此操作,只是删除了 > 和尝试在 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 或您更熟悉的其他解析库?
【问题讨论】:
-
您是否使用过类似 StringTokenizer 的东西?只是在这里大声思考。
-
我相信这只是一个简化的正则表达式,现在已弃用 - 来自 Java 文档“StringTokenizer 是一个遗留类,出于兼容性原因保留,尽管在新代码中不鼓励使用它。建议任何人使用 String 的 split 方法或 java.util.regex 包来寻求此功能。"正则表达式实际上对我来说工作得很好,但在 html 上使用正则表达式显然是一件糟糕的事情。
标签: java html parsing nested htmlcleaner