当前位置: 首页 > 知识库问答 >
问题:

Jsoup-提取文本

穆丁雨
2023-03-14

我需要从如下节点中提取文本:

<div>
    Some text <b>with tags</b> might go here.
    <p>Also there are paragraphs</p>
    More text can go without paragraphs<br/>
</div>

我需要建立:

Some text <b>with tags</b> might go here.
Also there are paragraphs
More text can go without paragraphs

Element.text仅返回div的所有内容。Element.ownText-不在子元素内的所有内容。两者都错了。迭代子节点会忽略文本节点。

  • 文本节点-某些文本

共有3个答案

侯池暝
2023-03-14

假设您只需要文本(无标记),我的解决方案如下。
输出是:
一些带有标记的文本可能会出现在这里。还有一些段落。更多文本可以不带段落

public static void main(String[] args) throws IOException {
    String str = 
                "<div>"  
            +   "    Some text <b>with tags</b> might go here."
            +   "    <p>Also there are paragraphs.</p>"
            +   "    More text can go without paragraphs<br/>" 
            +   "</div>";

    Document doc = Jsoup.parse(str);
    Element div = doc.select("div").first();
    StringBuilder builder = new StringBuilder();
    stripTags(builder, div.childNodes());
    System.out.println("Text without tags: " + builder.toString());
}

/**
 * Strip tags from a List of type <code>Node</code>
 * @param builder StringBuilder : input and output
 * @param nodesList List of type <code>Node</code>
 */
public static void stripTags (StringBuilder builder, List<Node> nodesList) {

    for (Node node : nodesList) {
        String nodeName  = node.nodeName();

        if (nodeName.equalsIgnoreCase("#text")) {
            builder.append(node.toString());
        } else {
            // recurse
            stripTags(builder, node.childNodes());
        }
    }
}
胡俊贤
2023-03-14
for (Element el : doc.select("body").select("*")) {

        for (TextNode node : el.textNodes()) {

                    node.text() ));

        }

    }
后星河
2023-03-14

children()返回一个Elements对象——元素对象的列表。查看父类Node,您将看到允许您访问任意节点的方法,而不仅仅是元素,例如Node.childNodes()。

public static void main(String[] args) throws IOException {
    String str = "<div>" +
            "    Some text <b>with tags</b> might go here." +
            "    <p>Also there are paragraphs</p>" +
            "    More text can go without paragraphs<br/>" +
            "</div>";

    Document doc = Jsoup.parse(str);
    Element div = doc.select("div").first();
    int i = 0;

    for (Node node : div.childNodes()) {
        i++;
        System.out.println(String.format("%d %s %s",
                i,
                node.getClass().getSimpleName(),
                node.toString()));
    }
}
1 TextNode 
 Some text 
2 Element <b>with tags</b>
3 TextNode  might go here. 
4 Element <p>Also there are paragraphs</p>
5 TextNode  More text can go without paragraphs
6 Element <br/>
 类似资料:
  • 问题内容: 我正在编写一些Java代码,以便使用Wikipedia在文本上实现NLP任务。如何使用JSoup提取Wikipedia文章的所有文本(例如,http://en.wikipedia.org/wiki/Boston中的所有文本)? 问题答案: 当然,您可以通过这种方式检索格式化的内容。如果您想要“原始”内容,则可以使用或使用call 过滤结果。

  • 主要内容:Jsoup 获取文本 语法,Jsoup 获取文本 说明,Jsoup 获取文本 示例以下示例将展示在将 HTML 字符串解析为 Document 对象后获取文本的方法的使用。 Jsoup 获取文本 语法 document : 文档对象代表 HTML DOM。 Jsoup : 解析给定 HTML 字符串的主类。 html : HTML 字符串。 link : 元素对象表示表示锚标记的 html 节点元素。 link.text() : text() 方法检索元素文本。 Jsoup 获

  • 我试图提取JSOUP中给定元素中的链接。这里我做了什么但它不起作用: 我正在尝试做的事情是获得所有的链接与文章类。我想,也许首先我必须选择section class=“row”,然后从article类派生链接,但我无法使其工作。

  • 我一直在研究用于数据提取的Jsoup示例,并提取了此链接的一个示例 J汤

  • 问题内容: 这是我的问题。我有一个html内容:innerText我需要提取“ innerText”。在Jsoup中尝试此操作时,我发现当由Jsoup解析时,内部文本超出了定位标记。 这是我的代码 输出: 为什么“ innerText”移到了定位标记之外? 问题答案: 您可以通过调用元素上的方法来访问文本。 顺便说一句 使用您发布的代码(和JSoup 1.8.1)产生以下输出

  • 有多个包含美国专利No.9,000,000的转让数据的div元素出现在行下面 有办法用JSOUP提取这个隐藏的html吗?