繁体   English   中英

针对多个XSD验证XML文件,并知道哪个验证该文件(jdom2)

[英]Validate XML file against several XSD and know which one validates the file (jdom2)

我想针对两个不同的XSD验证XML文件,因为不必针对两个文件都验证XML文件,而仅针对其中一个验证。 然后,我需要知道哪个XSD文件验证XML文件以便访问不同的元素。

XSD文件具有以下类型: sdfcsdf,但是我有自己的版本,因此我不使用XML标头中的模式(并且我不想要求用户对此进行修改)。

问题:如何轻松地进行验证测试,然后使用单个xml库(如果可能的话是jdom2)解析XML文件(根据正确的模式)?

目前,我使用javax进行验证,使用jdom2访问元素,但我认为/希望可以使用一个库来做同样的事情,至少是为了不一次又一次地解析文件。 而且,正如一个微笑的问题所指出的那样,为了理解javax的工作原理,我宁愿不吸毒。

使用JDOM 2,您可以设置两个不同的XML读取器-每个模式一个。

然后,您可以使用SAXParser并通过阅读器来阅读文档,无论哪种方案都正确。

考虑类似( XMLReaderXSDFactory

sdfreader = new XMLReaderXSDFactory("http://www.es.ele.tue.nl/sdf3/xsd/sdf3-sdf.xsd");
csdfreader = new XMLReaderXSDFactory("http://www.es.ele.tue.nl/sdf3/xsd/sdf3-csdf.xsd");

然后,使用这些阅读器工厂,您可以使用其他构造函数设置SAXBuilder:

SAXBuilder sdfbuilder = new SAXBuilder(sdfreader);
SAXBuilder csdfbuilder = new SAXBuilder(csdfreader);

现在,您可以通过任何一个构建文档。 无论“成功”构建文档的哪一个都具有正确的模式。

try {
    Document doc = sdfbuilder.build(somexml);
    System.out.println("Parsed using sdf")
    return doc
} catch (JDOMException x) {
    // parse failed, probably wrong schema....
}

try {
    Document doc = csdfbuilder.build(somexml);
    System.out.println("Parsed using csdf")
    return doc
} catch (JDOMException x) {
    // parse failed, probably wrong schema....
}

// oops, nothing works for this document...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM