2009-06-09 69 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)。如果这在原始字符串中不存在,那么它很可能是字符解码问题。