如何过滤嵌套标签中的噪音?例如,我有这个输入:
[输入:]
<html>
<source>
<noise>something something, many many things</noise>foo bar bar<noise>more something something noise</noise>baring foo
</source>
</html>
我需要得到这个输出:
[输出]
foo bar bar
baring foo
我已经试过了,但我仍然从嵌套标签中听到噪音:
import java.io.*;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.parser.Parser;
public class HelloJsoup {
public static void main(String[] args) throws IOException {
String br = "<html><source><noise>something something, many many things</noise>foo bar bar<noise>more something something noise</noise>baring foo</source></html>";
Document doc = Jsoup.parse(br, "", Parser.xmlParser());
//System.out.println(doc);
for (Element sentence : doc.getElementsByTag("source"))
System.out.print(sentence.text());
}
}
[输出:]
something something, many many thingsfoo bar barmore something something noisebaring foo
最佳答案
通过先删除噪声标签,您将得到 <source>foo bar barbaring foo</source>
,尽管要实现您指定的输出,您可以遍历节点并在新行上打印每个 TextNode。例如:
String br = "<html><source><noise>something something, many many things</noise>foo bar bar<noise>more something something noise</noise>baring foo</source></html>";
Document doc = Jsoup.parse(br, "", Parser.xmlParser());
Element source = doc.select("source").first(); // select source element
Elements noise = doc.select("noise"); // Select noise elements
for (Element e : noise) { // loop through and remove each from doc
e.remove();
}
for (Node node : source.childNodes()) {
System.out.println(node); // print each remaining textnode on a new line
}
输出:
foo bar bar
baring foo
更新
我发现这是一个更简单的方法:
Element source = doc.select("source").first(); // select source element
for (TextNode node : source.textNodes()) {
System.out.println(node);
}
它遍历<source>
直接拥有的textNodes元素并将每个元素打印到一个新行。输出是:
foo bar bar
baring foo
关于java - 如何过滤 JSoup 中嵌套标签中的噪音? java ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21678633/