在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)没有。
如何替换无效的字符? 感谢。
答案 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的错误。