我正在使用SAX在Java中进行XML验证,并且我想识别以下类型的错误: “在文本内容中找到了无效字符”。
此刻,我对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>
这是解析器实例化的一个例子:
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);
错误处理程序实现方法'warning','error'和'fatalError',但没有检测到任何内容。 实体解析器允许引导存储在配置目录中的客户实体文件。
是否有人知道为什么没有检测到这种格式错误的字符错误?是因为我的流来自String而不是文件吗?
提前感谢您的帮助。
问候。
答案 0 :(得分:-1)
是的,显然你已经完成了字节到字符的转换,因为你已经拥有了字符串。如果要检测无效字符,则需要解析字节。通常,将xml数据保存为字符串数据并不好,因为您可能会通过错误的字符编码来破坏它。处理xml的最佳方法是二进制数据。