微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Java中的多个XSD验证XML

如何解决使用Java中的多个XSD验证XML

曾经设计过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解析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)解析器?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。