使用Java中的多个XSD验证XML [英] Validating XML with multiple XSDs in Java

查看:121
本文介绍了使用Java中的多个XSD验证XML的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to parse an XML file with Java and validate it in the same step against an XSD schema. An XML file may contain content of several schemas, like this:

<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文件,但在解析之前使用的命名空间是未知的。如果模式定义属性的默认值,我也想以某种方式知道。

Given a namespace the corresponding xsd file can be provided, but the used namespaces are unknown before parsing. If a schema defines default values for attributes, I also want to know that somehow.

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

I was able to validate a file if the schemas are known, I was able to parse a file without validation and I implemented a LSResourceResolver. However, I can't get all of it working together. How do I have to set up my (SAX) parser?

推荐答案

曾经设计过Java XML API的人一直在使用毒品...

Who ever designed the Java XML API must have been using drugs...

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中的多个XSD验证XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆