2017-06-15 39 views
1

在我的應用程序的一個部分一個空白,我用這個代碼讀取RSS提要:錯誤而解析飼料由於XML文件

 DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document dom = builder.parse(this.url.openConnection().getInputStream()); 
     Element root = dom.getDocumentElement(); 
     NodeList items = root.getElementsByTagName("item"); 
     for (int i=0;i<items.getLength();i++){... 

的問題是飼料的一個我只想要<?xml就這樣

<?xml version="1.0" encoding="utf-8"?> 
<!-- generator="Joomla! - Open Source Content Management" --> 
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> 

當我的應用程序試圖讀取該飼料拋出下面的錯誤之前閱讀開始蒙山一個空白:

org.xml.sax.SAXParseException: processing instructions must not start with xml (position:unknown @1:2 in [email protected])

現在我的疑問是:我該如何避免這個錯誤?

謝謝。

回答

0

如果您確定響應的結構,可以使用InputStream的skip()方法。找到下面的代碼片段。

Document dom = builder.parse(this.url.openConnection().getInputStream().skip(1)); 
Element root = dom.getDocumentElement(); 

否則將InputStream轉換爲String。您可以使用Apache IOUtils。 處理字符串,然後解析xml。

+0

問題是我使用此代碼來讀取不同的飼料,但只有一個有這個問題。另一方面,當我嘗試添加跳過(1)時出現此錯誤:「類型DocumentBuilder中的方法解析(InputStream)不適用於參數(long)」 –

+0

try skip(1l)。默認情況下,1將被視爲Integer。所以用1l代替。 –

+0

如果使用相同的代碼來讀取不同的Feed,更好的選擇是將響應轉換爲String並使用trim()函數。 –