有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JSoup逐个标记解析HTML

我正在用Java开发一个文本解析器,我被要求通过解析HTML来增强它。 解析器的目的是将解析后的文件分成3个其他文件,一个包含文件中的所有单词,一个包含所有句子,另一个包含所有问题

那个*。txt部分工作得很好,但我在解析HTML时遇到了一个问题

我用*创建了一个临时文件。txt扩展名并将其传递到我的文本解析器中,但如果我传递一个链接了HTML文件的URL,其格式如下:

<!DOCTYPE html>
    <head>
        ... some HTML here ...
    </head>
    <body>
        <ul class="some_menu">
            <li class="some_menu_item">n1</li>
            <li class="some_menu_item">n2</li>
            <li class="some_menu_item">n2</li>
        </ul>
        <div>
            This is a question ?
            This is a sentence .
            ... some other text ...
        </div>
    </body>
</html>

问题文件将填写:n1 n2 n3 This is a question

所以,我只是想知道,有没有一种方法可以用JSoup标记逐个进行解析,这样每次关闭一个块时我都可以添加一个换行符

如果你需要一些新信息,不要费心问

编辑:我应该有3个输出文件,例如:

  1. 一个字里行间

    n1
    n2
    n3
    This
    is
    a
    question
    sentence
    ... some other words ...
    
  2. 一个有所有句子

    This is a sentence
    
  3. 一个有所有问题的人

    This is a question
    

蒂姆姆


共 (2) 个答案

  1. # 1 楼答案

    要获取html正文中的所有文本,可以使用:

    Document doc = Jsoup.connect(url).get();
    Elements body = doc.select("body");
    String allText = body[0].text();
    

    然后可以拆分文本,使每个单词分开。 要获取div标记中的文本,可以使用:

    Elements div = doc.select("div");
    String divText = div[0].text();
    

    然后可以拆分文本以获得每个句子

    请注意,select查询的返回类型实际上是元素列表,即元素。这是因为可以有多个元素与select查询匹配。在本例中,由于每种情况只有一个元素,我们通过访问返回数组的索引0来访问它

    编辑:为了遍历所有元素,请选中此answer。基本上

    Elements elements = doc.body().select("*");
    
    for (Element element : elements) {
        System.out.println(element.text());
    }
    

    虽然可能有没有文本的元素,所以你可以检查一下