2009-06-09 114 views
7

解析xml時出現以下異常。遇到無效字符'&#x0'

Fatal error at line -1 Invalid character '&#x0' encountered. No stack trace 

我有字符串格式的Xml數據,我使用DOM解析器解析它。 我正在解析數據,這是從Java服務器到黑莓客戶端的響應。 我也試着用SAX解析器解析,但問題沒有解決。 請幫忙。

+0

向我們展示了XML – 2009-06-09 05:04:24

+0

價值 XML是字符串格式 – iOSDev 2009-06-09 05:15:42

回答

4

我得到了解決,

我只是裝飾() 修剪它和它的工作完美的罰款和我在一起。

2

聞起來就像你試圖將一個空字符串解析爲XML。你是否證實客戶得到了很好的迴應?

+0

是的,我已經打印來自服務器的效應初探。 它不爲空。 每當我「硬編碼」的字符串響應,解析器工作得很好。 但我不能在我的真實項目中硬編碼響應。 請幫忙。 – iOSDev 2009-06-09 05:13:22

+0

讓我們來澄清一下 - 如果你硬編碼響應你的客戶端是好的,但是當你使用服務器的響應時,你會得到這個錯誤?那是你在說什麼? – Andrew 2009-06-09 08:03:06

+0

是的,你是對的。 硬編碼工作正常... – iOSDev 2009-06-09 08:38:59

0
InputStream xml = new ByteArrayInputStream(xmlData.getBytes()); 
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
Document doc = docBuilder.parse(xml); 
doc.getDocumentElement().normalize(); 
xml.close(); 

上面是我用於解析的代碼。

+0

感謝您編寫格式良好的代碼 – iOSDev 2009-06-09 08:54:17

3

您的代碼當前使用平臺默認編碼調用getBytes() - 這非常不明智。找出數據的編碼真的是什麼,並使用它。 (這很可能是UTF-8)。

如果BlackBerry包括DocumentBuilder.parse(InputSource),這將是可取的:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
StringReader reader = new StringReader(xmlData); 
try { 
    Document doc = docBuilder.parse(xml); 
    doc.getDocumentElement().normalize(); 
} finally { 
    reader.close(); 
} 

如果這樣做不行,必須在你的字符串非常仔細看,例如像這樣:

for (int i=0; i < xmlData.length(); i++) { 
    // Use whatever logging you have on the Blackberry 
    System.out.println((int) xmlData.charAt(i)); 
} 

這可能是問題從服務器讀取響應 - 如果你不好讀它,你可以有統一的空值(\ u0000的)在你的字符串,它可能不會在出現明顯日誌/調試輸出,但會導致您顯示的錯誤。

編輯:我剛剛看到你首先得到base64數據 - 所以爲什麼要將它轉換爲字符串,然後回到字節?只需將base64解碼爲一個字節數組,然後將其用作ByteArrayInputStream的基礎。那麼你從來沒有必要首先處理文本編碼。

1

你使用什麼字符編碼?難道是使用了Unicode,並且在開始時發送了BOM

12

您的字符流中有一個空字符,即在XML文檔中無效的char(0)。如果這在原始字符串中不存在,那麼它很可能是字符解碼問題。