2012-12-14 157 views
4

我正面臨Jsoup的一些問題。我試圖從我的測試版Android應用程序中使用API​​檢索Open Movie Database中的xml文件。 他們的API文檔說,如果返回類型只是一個xml,只是放一個「r =」和返回文件類型。 我已經測試過一些請求。其中之一:Jsoup無法讀取xml返回文件

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

在瀏覽器上測試正常工作。但在Android沒有。拋出任何異常。如果我不插入返回文件類型,它將返回一個JSON。在這種情況下,我收到數據。 確保問題是否與xml文件一致。我已經用MusicBrainz API進行了測試。默認情況下,它返回XML。我的驚喜工作正常。

什麼問題? Jsoup開放電影數據庫的返回類型?

+0

「拋出任何異常」是什麼意思? Logcat說什麼? – kaderud

+0

我不明白。如果我說「拋出任何異常」意味着代碼有效,應用程序不會崩潰。 Logcat什麼也沒說。 – learner

回答

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> 
+0

我不明白爲什麼會產生這個結果。你說的是真的。 – learner

0

發現問題。價值觀總是在那裏。我不知道爲什麼,但返回類型是一個包含xml標籤的html文件。在Logcat上打印值,它會返回html標籤html,head,body,並且僅在此之後才返回XML。