4

我在使用 Jsoup 时遇到了一些问题。我正在尝试在我的 beta Android 应用程序中使用他们的 API 从开放电影数据库中检索 xml 文件。他们的 API 文档说,如果返回类型是 xml,只需输入“r=”和返回文件类型。我已经测试了一些请求。在其中之一之下:

Jsoup.connect(http://www.omdbapi.com/?i=tt1285016&r=xml).get();

在浏览器上测试工作正常。但在安卓上没有。抛出任何异常。如果我不插入返回文件类型,它会返回一个 JSON。在这种情况下,我收到数据。确定问题是否与 xml 文件有关。我已经使用 MusicBrainz API 进行了测试。默认情况下它返回 XML。令我惊讶的是,效果很好。

问题是什么?Jsoup打开电影数据库的返回类型?

4

2 回答 2

2

Jsoup 的主要重点是处理 HTML,并确保返回的文档是格式良好的 HTML。因此,默认情况下,它将始终将输入视为 HTML 并规范化文档。这就是为什么你得到一个像<html><head></head>...<xml>...</html>.

如果你知道你给它的输入实际上是 XML,你可以配置 Jsoup 以 XML 模式解析。在这种情况下,它不会规范化为 HTML DOM,也不会强制执行任何 HTML 规范规则。

举个例子:

String url = "http://www.omdbapi.com/?i=tt1285016&r=xml";
Document doc = Jsoup.connect(url)
    .parser(Parser.xmlParser())
    .get();

System.out.println(doc);

比较有和没有Parser.xmlParser()配置的输出:

在 XML 模式下:

<?xml version="1.0" encoding="UTF-8"?>
<root response="True">
 <movie title="The Social Network" year="2010" {snip} />
</root>

在 HTML 模式下:

<!--?xml version="1.0" encoding="UTF-8"?-->
<html>
 <head></head>
 <body>
  <root response="True">
   <movie title="The Social Network" {snip} />
  </root>
 </body>
</html>
于 2012-12-15T23:26:13.007 回答
0

发现了问题。价值观一直存在。我不知道为什么,但返回类型是一个包含 xml 标签的 html 文件。在 Logcat 上打印值,它返回 html 标签 html、head、body,并且仅在此之后返回 XML。

于 2012-12-14T11:37:40.483 回答