我想针对两个不同的XSD验证XML文件,因为知道XML文件不必针对它们两者进行验证,而只需要对其中一个进行验证。然后我需要知道哪个XSD文件验证XML文件以访问不同的元素。
XSD文件属于以下类型:sdf和csdf但我有自己的版本,因此我不使用XML标题中的架构(我不想要求用户修改此项)。
问题:如何轻松地进行验证测试,然后使用单个xml库(如果可能的话,jdom2)解析XML文件(根据正确的架构)?
目前我使用javax进行验证,使用jdom2访问元素,但我认为/希望可以使用一个单独的库做同样的事情,至少为了不再一次解析文件。好吧,正如a smilar question所指出的那样,为了理解javax的工作原理,我不想吸毒。
答案 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...