bob*_*205 2 xml schema xsd saxparser saxparseexception
所以我有大量的XML文件.多年来,他们造成了麻烦,因为写这些人的人手工完成,所以错误自然而然地发生了.我们现在应该验证它们并在尝试使用这些XML文件时提供有关错误的反馈.
我正在使用SAX解析器并获取错误列表.
以下是我的代码
BookValidationErrorHandler errorHandler = new BookValidationErrorHandler();
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
factory.setNamespaceAware(true);
SchemaFactory schemaFactory =
SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
factory.setSchema(schemaFactory.newSchema(
new Source[] {new StreamSource("test.xsd")}));
javax.xml.parsers.SAXParser parser = factory.newSAXParser();
org.xml.sax.XMLReader reader = parser.getXMLReader();
reader.setErrorHandler(errorHandler);
reader.parse(new InputSource("bad.xml"));
Run Code Online (Sandbox Code Playgroud)
前几个错误始终是:
行号:2:文档无效:未找到语法.行号:2:文档根元素"信用",必须与DOCTYPE根"null"匹配.
我们不可能去编辑需要检查的数千个XML文件.
有什么我可以轻松添加到源的前面以防止这种情况吗?有没有办法告诉解析器忽略这些与DTD相关的错误?甚至不确定语法是什么意思.我有点理解第二个意味着什么.
setValidating(true)如果不存在DTD,则设置请求DTD验证并导致失败.如果您只想要架构验证而不是DTD验证,那么请使用setValidating(false).来自JavadocsetValidating():
要使用现代模式语言(如W3C XML Schema或RELAX NG而不是DTD),可以通过将
setValidating(boolean)方法保留为false 来将解析器配置为非验证解析器,然后使用该setSchema(Schema)方法将模式与解析器相关联.
| 归档时间: |
|
| 查看次数: |
2711 次 |
| 最近记录: |