使用Java中的Jsoup替换多个标记中的HTML文本

时间:2014-08-01 05:34:05

标签: java html jsoup

我正在使用java逐行读取HTML文件。考虑我有一个HTML行

<p> Hi everyone. This is a <em>dead end.</em> Do not go!</p>

我想将行中的文字更改为

<p> Hi everyone. This is not a <em>dead end.</em>You may go!</p>

输入将以

的形式给出
  • 更改自: This is a dead end. Do not go!
  • 更改为: This is not a dead end. You may go!

如何在不使用Java中的Jsoup或java中的任何其他方法干扰HTML标记的情况下执行此操作。 请帮忙

1 个答案:

答案 0 :(得分:2)

作为 MCL 解决方案的替代方案,这里有一个完全基于Jsoup的解决方案:

首先,这里是Jsoup如何看待你的HTML:

org.jsoup.nodes.TextNode:    Hi everyone. This is a 
org.jsoup.nodes.Element:    <em>dead end.</em>
org.jsoup.nodes.TextNode:    Do not go!

所有三个节点都是<p>...</p>元素的子节点。

这是(非常详细的)代码:

final String html = "<p> Hi everyone. This is a <em>dead end.</em> Do not go!</p>";

Document doc = Jsoup.parseBodyFragment(html); // Parse html into a document
Element pTag = doc.select("p").first(); // Select the p-element (there's just one)


// Text before 'em'-tag
TextNode preEM = (TextNode) pTag.childNode(0);
preEM.text(preEM.text().replace("This is a", "This is not a"));

// Text after 'em'-tag
TextNode postEM = (TextNode) pTag.childNode(2);
postEM.text("You may go!");


System.out.println(pTag); // Print result

<强>输出:

<p> Hi everyone. This is not a <em>dead end.</em>You may go!</p>

这将保留所有html格式和/或将在完整文档中使用。