Jsoup无法读取XML返回文件。

4
我遇到了Jsoup的一些问题。我正在尝试在我的测试版Android应用程序中使用他们的API从Open Movie Database检索xml文件。 他们的API文档说明,如果返回类型为xml,只需加上“r =”和返回文件类型。 我已经测试了一些请求。以下是其中之一:
Jsoup.connect(http://www.omdbapi.com/?i=tt1285016&r=xml).get();

在浏览器上测试可以正常工作,但在Android上不行。没有任何异常抛出。如果我不插入返回文件类型,则返回JSON。在这种情况下,我收到数据。

为了确保问题是否与XML文件有关,我使用了MusicBrainz API进行了测试。默认情况下返回XML。令我惊讶的是,它也可以正常工作。

问题出在哪里?是Jsoup打开电影数据库的返回类型吗?


"抛出任何异常"是什么意思?Logcat 说了什么? - kaderud
我不明白。如果我说“没有抛出任何异常”,意味着代码运行正常,应用程序不会崩溃。Logcat 没有任何输出。 - learner
2个回答

2

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>

我不明白为什么会产生那个结果。你说的是对的。 - learner

0
发现问题所在。 值一直存在,但我不知道为什么返回类型是带有 XML 标签的 HTML 文件。 在 Logcat 上打印值时,它会返回 HTML 标记 html、head、body ,只有在这之后才是 XML。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接