我正在尝试使用Jsoup解析HTML文件并删除html标记。每当我删除HTML标记时,我都需要一个分隔符(fullstop)而不是标记。
例如,如果html是:
<head>
<title>N-gram and Fast Pattern Extraction Algorithm - CodeProject</title>
我希望输出为
..N-gram and Fast Pattern Extraction Algorithm - CodeProject.
我是Jsoup的新人。是否可以使用Jsoup?
答案 0 :(得分:1)
小心递归。对于一个大型DOM,它可能会导致您出现问题,无论是内存还是性能方面。
import java.util.ListIterator;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.TextNode;
import org.jsoup.select.Elements;
public class Main {
public static void main(String[] args) {
try {
String html = "<html><head>" +
"<title>Introduction</title>" +
"</head>" +
"<body>" +
"<a target=\"_top\" href=\"/tags/ref_eventattributes.asp\">HTML Events</a>"+
"<a target=\"_top\" href=\"/tags/ref_canvas.asp\">HTML Canvas</a>"+
"<a target=\"_top\" href=\"/tags/ref_av_dom.asp\">HTML Audio/Video</a>"+
"<a target=\"_top\" href=\"/tags/ref_html_dtd.asp\">HTML Doctypes</a></body></html>";
Document doc = Jsoup.parse(html);
System.out.println(doc);
System.out.println("\n------------------------------------------------------\n");
replaceTag(doc.children());
System.out.println(doc);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void replaceTag(Elements els) {
ListIterator<Element> iter = els.listIterator();
while(iter.hasNext()) {
Element el = iter.next();
replaceTag(el.children());
if(el.parentNode() != null)
el.replaceWith(new TextNode("." + el.text().trim() + ".", ""));
}
}
}