【问题标题】:What is the best way to validate multiple XML files against a XSD?针对 XSD 验证多个 XML 文件的最佳方法是什么?
【发布时间】:2018-10-09 12:38:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: java xml validation xsd


    【解决方案1】:

    这里假设您使用 JAXP,因此您可以在 SAXParserFactory 或 `DocumentBuilderFactory 上使用 setSchema()

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

    另外,我记得,<include> 在这种机制下效果不佳。

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 2014-02-05
      • 2021-04-11
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      相关资源
      最近更新 更多