【问题标题】:Jsoup can't read xml return fileJsoup 无法读取 xml 返回文件
【发布时间】:2012-12-14 01:21:01
【问题描述】:

我在使用 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打开电影数据库的返回类型?

【问题讨论】:

  • “抛出任何异常”是什么意思? Logcat 是怎么说的?
  • 我不明白。如果我说“抛出任何异常”意味着代码可以正常工作并且应用程序不会崩溃。 Logcat 什么也没说。

标签: android xml api parsing jsoup


【解决方案1】:

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

如果你知道你给它的输入实际上是 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>

【讨论】:

  • 我不明白为什么会产生这个结果。你说的是真的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2017-03-21
    • 1970-01-01
    • 2011-05-14
    • 2020-04-15
    相关资源
    最近更新 更多