如何使用 JSoup 通过标签获取元素?- 爪哇

alv*_*vas 3 html java xml parsing jsoup

如何使用 JSoup ( http://jsoup.org/ ) 通过标签获取元素?

我有以下输入并需要以下输出,但我没有在标签内获取文本<source>...<\source>

[在:]

<html>
  <something>
    <source>foo bar bar</source>
  <something>
  <source>foo foo bar</source>
</html>
Run Code Online (Sandbox Code Playgroud)

[期望出局:]

foo bar bar
foo foo bar
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这个:

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;

public class HelloJsoup {
    public static void main(String[] args) throws IOException {

        String br = "<html><source>foo bar bar</source></html>";
        Document doc = Jsoup.parse(br);
        //System.out.println(doc);
        for (Element sentence : doc.getElementsByTag("source"))
            System.out.print(sentence);

    }
}
Run Code Online (Sandbox Code Playgroud)

但它输出:

<source></source>
Run Code Online (Sandbox Code Playgroud)

ash*_*tte 5

您需要使用xmlParser(),您可以将其传递给该parse()方法:

String br = "<html><source>foo bar bar</source></html>";
Document doc = Jsoup.parse(br, "", Parser.xmlParser());

for (Element sentence : doc.getElementsByTag("source"))
    System.out.println(sentence.text());

}
Run Code Online (Sandbox Code Playgroud)

有关此内容的更多信息,请参阅文档:http://jsoup.org/apidocs/org/jsoup/parser/Parser.html#xmlParser()

  • `&lt;source&gt;` 标签是 HTML5 中的新标签,并且 Jsoup 似乎无法通过常规 HTML 解析来处理它(它必须尝试根据已知的 HTML 标签对其进行验证并失败)。通过使用 xmlParser,您可以解析任何标签(因为 XML 可以具有任意标签名称)。Jsoup 不会尝试将 XML 文档验证为 HTML,而只是根据文档中的标记集创建一棵树。 (2认同)