Java:SAX 忽略模式验证

标签 java xml sax

我有以下 xml 架构 module.xsd:

<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" >
    <xs:element name="module2">
      <xs:complexType>
        <xs:sequence>
             <xs:element name="temp" type="xs:string" minOccurs="0"/>
        </xs:sequence>
      </xs:complexType>
    </xs:element> 
</xs:schema>

我有以下 xml 文档 module.xml:

<module xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="module.xsd">
    <init-param name="foo" value="boo"/>
</module>

这是我创建解析器的代码:

Schema xmlSchema = null;
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
xmlSchema = schemaFactory.newSchema(getClass().getResource(MODULE_PATH));
if (xmlSchema==null){
    System.out.println("Schema NULL");
}else{
    System.out.println("Schema NOT NULL");
}
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
parserFactory.setSchema(xmlSchema);
parserFactory.setValidating(true);
parserFactory.setNamespaceAware(true);
SAXParser saxParser = parserFactory.newSAXParser();

我得到Schema NOT NULL并且我的文件被解析没有任何问题。但我等待异常,因为架构错误。我的错误是什么?

最佳答案

如果解析器遇到架构验证,它不会抛出异常,而是向其 ErrorHandler 报告违规情况,在大多数情况下,该错误处理程序将是传递给 SaxParser 的 DefaultHandler .parse():

如果您希望将验证错误作为异常抛出,请覆盖 DefaultHandler.error:

saxParser.parse(new File("module.xml"), new DefaultHandler() {
    public void error (SAXParseException e) throws SAXException {
        throw e;
    }
});

关于Java:SAX 忽略模式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967501/

相关文章:

java - 如何使列表彼此并排(水平)而不是向下(垂直)。

java - IntelliJ - 从文件中获取标准输入

java - Retrofit 2中如何同时调用多个请求

java - 有没有办法为同一个 ImageView 使用多个源?

objective-c - 简单简洁的桌面Cocoa NSXMLParser例子?

java - DocumentBuilderFactory 获取可用功能吗?

java - 如何修复Java Spark提交错误: NoSuchMethodError: javax.validation.BootstrapConfiguration.getClockProviderClassName()Ljava/lang/String

java - Android menuItem setChecked 不起作用

c++ - 如何使用 TinyXML2 库在 C++ 中迭代 XML 节点

c++ - 对大文件有效的轻量级 XML 解析器?