【问题标题】:Avoid spaceless concatenation with JSoup使用 JSoup 避免无空间连接
【发布时间】:2011-10-31 03:39:05
【问题描述】:

假设我有一个这样的 div:

<div>
This is a paragraph
written by someone
on the internet.
</div>

问题是,当 JSoup 解析这个时,它把它全部放在一行上,所以当我调用 text() 时它会这样读取:

This is a paragraphwritten by someoneon the internet.

现在,我意识到这并不是真正的 JSoup 问题,因为实际的 html 不包含空格。但是,有什么方法可以使用 JSoup(可能是一些覆盖或我没见过的选项),以便在解析时在行之间添加一个空格?我想这一定是可能的(因为我可以在 Chrome 中检查元素并取消选择自动换行,它会得到我想要的)但我不确定 JSoup 是否可以做到这一点。

有什么想法吗?

【问题讨论】:

    标签: java dom screen-scraping jsoup


    【解决方案1】:

    您能否提供代码的完整示例?你用的是什么版本的jsoup?

    在当前版本(1.6.1)中,这段代码:

    Document doc = Jsoup.parse("<div>\n" +
        "This is a paragraph\n" +
        "written by someone\n" +
        "on the internet.\n" +
        "</div>");
    System.out.println(doc.text());
    

    生产:

    This is a paragraph written by someone on the internet.

    即,\n(和\r\n 等)被转换为文本作为空格。

    很高兴修复或改进它,如果我可以复制:)

    【讨论】:

    • 实际上,Jsoup 似乎非常好,这是我在数据中读取的方式(顺便说一句,JSoup 非常棒)。如果我只是做了一个像上面这样的简单测试,我就会知道更快地去别处看看。但是,我现在很好奇,是否可以让 JSoup 不解析新行?
    • 是的,换行符被保留,并且仅在 .text() 输出上标准化。您可以通过访问文本的 TextNode 并点击 .getWholeText() - jsoup.org/apidocs/org/jsoup/nodes/TextNode.html#getWholeText() 来获取它们
    【解决方案2】:

    下面的帖子展示了如何获得包括换行符在内的所有内容

    Removing HTML entities while preserving line breaks with JSoup

    下面的答案和评论还有另一种方式(看里面的评论)

    Remove HTML tags from a String

    如果您检查所有答案和 cmets,这甚至还有另一种方法

    How do I preserve line breaks when using jsoup to convert html to plain text?

    【讨论】:

    • 我需要提高我的搜索技能。谢谢你。时间允许我会接受的。
    猜你喜欢
    • 2012-05-23
    • 1970-01-01
    • 2016-12-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2011-08-16
    • 1970-01-01
    相关资源
    最近更新 更多