针对XSD验证多个XML文件的最佳方法是什么?

时间:2018-04-29 03:47:58

标签: java xml validation xsd

我正在开发一个项目,需要针对他们的XSD验证许多XML文件,我遇到的麻烦是许多 XSD文件依赖于其他XSD ,这使得通常的验证类型麻烦,是否有一种优雅的方法来解决这个问题?

如果可能的话,我希望在内存中使用这些文件,这些文件不是一个符合其输入路径的简洁目录结构。

请注意我正在使用Java语言。

1 个答案:

答案 0 :(得分:1)

假设您使用JAXP,那么您可以在setSchema()或`DocumentBuilderFactory上SAXParserFactory

我参与的一个解决方案是使用Schema将所有XSD源读入聚合的SchemaFactory.newSchema(Source[] schemas)对象。然后,这个聚合的Schema能够验证引用任何“顶层”模式的任何XML文档;所有imported模式都必须是聚合模式的一部分。我记得它,有必要依赖顺序排序Source数组,这样如果Schema A导入了Schema B,那么Schema B就必须在数组中出现Schema A.

另外,正如我记得的那样,<include>对这种机制起作用并不是很好。

另一个解决方案是在ShemaFactory上设置LSResourceResolver。您必须实现自己的LSResourceresolver,它根据解析器的输入提供字节或字符流。我没有亲自使用或研究过这个解决方案。

第一个解决方案当然有一个好处,即模式解析和处理可以完成一次,并重用于后面的所有验证;使用第二种选择可能很难实现的东西。

要记住的另一件事(取决于您的上下文):控制整个“解析”过程(即控制解析器如何访问外部资源)是一个很好的设计选择,从性能以及安全观点。