遇到无效字符' '

时间:2009-06-09 04:59:09

标签: java xml blackberry java-me

我在解析xml时遇到异常。

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

我有字符串格式的Xml数据,我使用DOM解析器解析它。 我正在解析数据,这是从Java服务器到Blackberry客户端的响应。 我也尝试使用SAX解析器解析,但问题没有解决。 请帮忙。

4 个答案:

答案 0 :(得分:14)

字符流中有一个空字符,即char(0),它在XML文档中无效。如果原始字符串中不存在,则很可能是字符解码问题。

答案 1 :(得分:5)

我得到了解决方案,

我只是修剪它() 它对我来说非常好。

答案 2 :(得分:4)

您的代码目前使用平台默认编码调用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));
}

问题可能是从服务器读取响应 - 如果你读得很糟糕,你的字符串中可能会有Unicode空值(\ u0000),这在日志/调试输出中可能不会显而易见,但是导致你出现的错误。

编辑:我刚刚看到你首先获得了base64数据 - 那么为什么要将它转换为字符串然后再转换为字节?只需将base64解码为字节数组,然后将其用作ByteArrayInputStream的基础。然后你就不必首先处理文本编码。

答案 3 :(得分: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();

上面是我用于解析的代码。