2011-02-15 143 views
0

我做Java中的XML验证,使用SAX“在文本内容中发现无效字符”,我想认识以下类型的错误: “一个无效的字符在文本内容中发现”。如何检测

目前,我有一个验证用SAX和一些文件我已经败坏没有检测到错误的字符。当我尝试用IE浏览器打开结果XML文件时,例如,我收到一条错误消息“在文本内容中发现无效字符”。

这是XML数据的例子:

<?xml version='1.0' encoding='UTF-8' standalone='yes'> 
<!DOCTYPE blabla SYSTEM 'blabla.dtd'> 
<blabla type='type' num='num'> 
<...>... corrupted character </...> 
</blabla> 

这是解析器的instanciation的例子:

SAXParserFactory factory = SAXParserFactory.newInstance(); 
factory.setValidating(true); 
factory.setNamespaceAware(true); 

parser = factory.newSAXParser(); 
parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); 
parser.setProperty(JAXP_SCHEMA_SOURCE, new File(theConfig.getRoot() 
     .concat(File.separator).concat(theConfig.getXsdFileName()) 
     .concat("-v").concat(theConfig.getXsdFileVersion()).concat(
         XSD_EXTENSION))); 
reader = parser.getXMLReader(); 
reader.setErrorHandler(getHandler()); 
reader.setEntityResolver(new MyEntityResolver(theConfig.getRoot(), 
       theConfig)); 
InputSource is = new InputSource(); 
is.setCharacterStream(new StringReader(theDataToParse)); 
reader.parse(is); 

错误处理程序实现方法“警告”,“错误”和'fatalError',但没有检测到。 实体解析器能够引导存储在配置目录中的custome实体文件。

是否有人有,为什么没有检测到这种畸形的字符错误的想法?是因为我的流来自String而不是文件?

在此先感谢您的帮助。

问候。

回答

-1

是的,显然你已经因为你已经持有该字符串做了字节字符转换。如果你想检测无效字符,你需要解析字节。一般来说,将xml数据保存为字符串数据并不好,因为您可能会通过不正确的字符编码来破坏它。处理xml的最好方式是作为二进制数据。

+0

好吧,其实就像你说的,我的第一个字节转换为字符,因为数据来自于EBCDIC格式大型机的基础设施,以及我第一次转换之前申请修改链接到我的XML结构(格式化)。我会检查我是否可以用另一种方式做到这一点,以便我有字节而不是字符。谢谢你的回答 – kij 2011-02-15 14:42:48