0

我正在使用 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);

错误处理程序实现方法“警告”、“错误”和“致命错误”,但没有检测到任何内容。实体解析器能够引导存储在配置目录中的客户实体文件。

有人知道为什么没有检测到这种格式错误的字符错误吗?是因为我的流来自字符串而不是文件吗?

在此先感谢您的帮助。

问候。

4

1 回答 1

-1

是的,显然您已经完成了字节到字符的转换,因为您已经持有字符串。如果要检测无效字符,则需要解析字节。一般来说,将 xml 数据保存为字符串数据并不好,因为您可能会因不正确的字符编码而损坏它。处理 xml 的最佳方式是将其视为二进制数据。

于 2011-02-15T14:36:56.727 回答