java - 如何过滤 JSoup 中嵌套标签中的噪音? java

标签 java html xml parsing jsoup

如何过滤嵌套标签中的噪音?例如,我有这个输入:

[输入:]

<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/

相关文章:

具有太多属性的java编辑对象

html - Firefox下 float 栏中Facebook按钮的水平Shif

xml - 如何在 Notepad++ 中搜索像DC1这样的符号

android - 无法初始化类 android.support.design.widget.CoordinatorLayout

java - 坐标系之间转换的 geotools 程序(gradle 构建)中的 NoSuchAuthorityCodeExcpetion

java - 无法访问tomcat javascript文件夹

html - 样式标签和输入标签相同

c++ - 如何在没有 MSXML 5 的情况下在 native C++ 中验证 XML 数字签名?

java - Apache Beam TextIO glob 获取原始文件名

html - 同一行上的不同文本样式