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

时间:2016-02-04 11:12:55

标签: java xsd-validation jdom-2

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

XSD文件属于以下类型:sdfcsdf但我有自己的版本,因此我不使用XML标题中的架构(我不想要求用户修改此项)。

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

目前我使用javax进行验证,使用jdom2访问元素,但我认为/希望可以使用一个单独的库做同样的事情,至少为了不再一次解析文件。好吧,正如a smilar question所指出的那样,为了理解javax的工作原理,我不想吸毒。

1 个答案:

答案 0 :(得分:0)

使用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 with a different constructor

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...