有关Java上无效XML字符的错误

时间:2010-03-02 10:06:58

标签: java xml parsing unicode

在Java上解析xml文件我收到错误:

An invalid XML character (Unicode: 0x0) was found in the element content of the document.

xml来自网络服务。

问题是我只在webservice在localhost(windows + tomcat)上运行时才会收到错误,但是当webservice在线时(linux + tomcat)没有。

如何替换无效的字符? 感谢。

4 个答案:

答案 0 :(得分:14)

Unicode字符0x0表示NULL,意味着您所提取的数据在某处包含NULL(XML中不允许这样做,因此您的错误)。

确保首先找出导致NULL的原因。

另外,您如何与WebService进行交互?如果您正在使用Axis,请确保WSDL具有为数据输入和输出指定的编码。

答案 1 :(得分:7)

使用此代码修复:

String cleanXMLString = null;
Pattern pattern = null;
Matcher matcher = null;
pattern = Pattern.compile("[\\000]*");
matcher = pattern.matcher(dirtyXMLString);
if (matcher.find()) {
   cleanXMLString = matcher.replaceAll("");
}

答案 2 :(得分:4)

这是编码问题。要么你把输入流读作UTF8而不是或者相反。

您应该在阅读内容时明确指定编码。例如。通过

new InputStreamReader(getInputStream(), "UTF-8")

另一个问题可能是tomcat。尝试在server.xml文件的tomcat连接器设置中添加URIEncoding =“UTF-8”。这是因为:

  

原来,JSP规范说如果没有明确声明JSP页面的页面编码,那么应该使用ISO-8859-1(!)。

取自here

答案 3 :(得分:-1)

有点环顾四周,发现0x0是一个空字符,其他人在这里遇到了与XML和空字符相同的问题http://forums.sun.com/thread.jspa?threadID=579849。不确定你是如何解析XML的,但是如果你先把它作为一个字符串,那么就会有一些关于如何在这里替换null http://forums.sun.com/thread.jspa?threadID=628189的错误。