我可以在Jsoup中的所有html text()元素之间包含空格

时间:2014-05-14 15:49:11

标签: java jsoup

我想使用Jsoup从HTML页面中提取所有文本,并返回所有文本的单个字符串,而不包含任何HTML。我使用的代码一半有效,但具有连接元素的效果,这些元素会影响我对字符串的关键字搜索。

这是我正在使用的Java代码:

String resultText = scrapePage(htmldoc);

private String scrapePage(Document doc) {
    Element allHTML = doc.select("html").first();
    return allHTML.text();
}

针对以下HTML运行:

<html>
  <body>
    <h1>Title</h1>
    <p>here is para1</p>
    <p>here is para2</p>
  </body>
</html>

输出resultText会给出&#34; Titlehere是para1here是para2&#34; 意味着我无法搜索单词&#34; para1&#34;唯一的一个词是&#34; para1here&#34;。

我不想将文档拆分成除必要之外的其他元素(例如,获取所有H1,p.text元素,因为我可以匹配各种各样的标记

(例如 data1data2 会来自):

<td>data1</td><td>data2</td>

有没有办法可以从页面获取所有文本但是还包含标签之间的空格?我不想保留whitepsace,否则不需要保留换行符,因为我只是准备一个关键字字符串。由于这个原因,我可能会将所有空白区域修剪为单个空格。

3 个答案:

答案 0 :(得分:0)

我没有使用 JSoup 1.7.3

来解决这个问题

这是我用于测试的完整代码:

final String html = "<html>\n"
        + "  <body>\n"
        + "    <h1>Title</h1>\n"
        + "    <p>here is para1</p>\n"
        + "    <p>here is para2</p>\n"
        + "  </body>\n"
        + "</html>";

Document doc = Jsoup.parse(html);

Element element = doc.select("html").first();

System.out.println(element.text());

输出:

Title here is para1 here is para2

你可以运行我的代码吗?如果你还没有1.7.3,也可以更新到更新版本的jsoup。

答案 1 :(得分:0)

之前的答案是不正确的,因为它只是因为添加到每一行的“\ n”行结尾,但实际上你可能没有在每行HTML行的末尾有行结束......

答案 2 :(得分:0)

void example2text() throws IOException {
    String url = "http://www.example.com/";

    String out = new Scanner(new URL(url).openStream(), "UTF-8").useDelimiter("\\A").next();
    org.jsoup.nodes.Document doc = Jsoup.parse(out);

    String text = "";
    Elements tags = doc.select("*");
    for (Element tag : tags) {
        for (TextNode tn : tag.textNodes()) {
            String tagText = tn.text().trim();
            if (tagText.length() > 0) {
                text += tagText + " ";
            }
        }
    }
    System.out.println(text);
}

使用答案:https://stackoverflow.com/a/35798214/4642669