使用 Jsoup 替换 HTML 每个标签中的文本
背景
为了对 HTML 进行文本翻译,需要提取 HTML 中每个标签中的文本。
如果使用传统方式进行提取,可能会效率低下,而且由于 HTML 结构复杂,非常不便。
在此介绍使用 Jsoup 替换 HTML 每个标签中的文本的方式。
实现
Jsoup 替换 HTML 每个标签中的文本:
Element entry = doc.select("body").first();
Elements tags = entry.getAllElements();
for (Element tag : tags) {
for (Node child : tag.childNodes()) {
if (child instanceof TextNode && !((TextNode) child).isBlank()) {
System.out.println(child); //text
((TextNode) child).text("word"); //replace to word
}
}
}
应用
翻译 HTML 步骤:
- 使用 Jsoup 遍历,提取每个文本加入 Map 键值对。
- 对 Map 键值对中的内容进行批量翻译。
public static String translateHTML(String html){ // 参数为待翻译的HTML
Document doc = Jsoup.parse(html);
Element entry = doc.select("body").first();
Elements tags = entry.getAllElements();
Map<String,String> map = new HashMap<>();
for (Element tag : tags) {
for (Node child : tag.childNodes()) {
if (child instanceof TextNode && !((TextNode) child).isBlank()) {
if (StringUtils.isNotBlank(child.toString())) {
map.put(child.toString(), child.toString()); // 将文本注入 map
}
}
}
}
translateText(map); // 批量翻译 map 中的键值对
for (Element tag : tags) {
for (Node child : tag.childNodes()) {
if (child instanceof TextNode && !((TextNode) child).isBlank()) {
if (StringUtils.isNotBlank(child.toString()) && map.containsKey(child.toString())) {
((TextNode)child ).text(map.get(child.toString())); // 文本替换
}
}
}
}
return doc.html(); // 返回新 HTML
}
相关文章