我正在使用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标记的情况下执行此操作。 请帮忙
答案 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格式和/或将在完整文档中使用。