java - 在 Java 中使用多个 XSD 验证 XML

标签 java xml validation xsd sax

我想使用 Java 解析 XML 文件,并在同一步骤中根据 XSD 架构验证它。一个 XML 文件可能包含多个模式的内容,如下所示:

<outer xmlns="my.outer.namespace" xmlns:x="my.third.namespace">
    <foo>hello</foo>
    <inner xmlns="my.inner.namespace">
         <bar x:id="bar">world</bar>
    </inner>
</outer>

给定一个命名空间,可以提供相应的xsd文件,但在解析之前所使用的命名空间是未知的。如果架构定义了属性的默认值,我也想以某种方式知道这一点。

如果模式已知,我就能够验证文件,我能够在没有验证的情况下解析文件,并且我实现了 LSResourceResolver。但是,我无法让所有这些一起工作。我该如何设置我的 (SAX) 解析器?

最佳答案

设计 Java XML API 的人一定吸过毒……

public void parseAndValidate(File xmlFile, ContentHandler handler) {
    SchemaFactory schemaFactory =
            SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
    schemaFactory.setResourceResolver(new MySchemaResolver());
    Schema schema = schemaFactory.newSchema();

    Validator v = schema.newValidator();
    v.setResourceResolver(schemaFactory.getResourceResolver());

    InputSource is = new InputSource(new FileInputStream(xmlFile));
    v.validate(new SAXSource(is), new SAXResult(handler));
}

关于java - 在 Java 中使用多个 XSD 验证 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2829105/

相关文章:

xml - Coldfusion XMLFormat() 不转换所有字符

java - jsp页面配置错误: Not able to redirect to my home.

javascript - 正则表达式 : Match repeating sequence pattern of numbers

Java arraylist 不兼容类型错误

java - 帮助解决堆栈溢出错误?

java - Hibernate:映射@OneToMany/@ManyToOne问题(不使用实体主键)

android - 当前的XML解析如何工作?

java - 使用 JPA 进行更新时如何排除实体字段

forms - (Vue) Ant Design 使用 v-decorator 以 Ant 的形式显示客户端和服务器端验证

asp.net - 以编程方式将验证控件添加到 asp.net 页面