【问题标题】:How can we automatically detect XSD schema files in XML file?我们如何自动检测 XML 文件中的 XSD 模式文件?
【发布时间】:2016-12-10 18:02:23
【问题描述】:

我正在尝试针对许多 XSD 文件验证 XML 文件。此时我只能手动输入 xsd 架构。 (我的意思是我检查了我的 XML 文件并查看了 XSD 定义)。如何检测任何 XML 文件中的 XSD 架构文件?

到目前为止我尝试了什么: // 以下方法针对多个 xsd 架构文件检查 xml 文件。

public static void XSDValidation() throws SAXException, IOException, ParserConfigurationException {

    try {

        SchemaFactory schemaFactory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");

        Schema sch = schemaFactory.newSchema(new Source[] { new StreamSource(new FileInputStream("role-1.2.xsd")),
                new StreamSource(new FileInputStream("role-1.1.xsd")) });

        Validator validator = sch.newValidator();

        validator.validate(new StreamSource("role.xml"));

        System.out.println("INFO: Validation is done successfully.");

    } catch (Exception e) {
        System.out.println("ERROR: Validation is failed.");
    }
}

我使用 DOM Parser 和 Java 8。

提前感谢所有帮助。

编辑: @kjhughes 我不是随便问的

根据 XSD 文件验证 XML 文件的最佳方法是什么?

我的问题:我们如何检测 XML 文件中的 XSD 架构文件。例如,当我想验证包含 b.xsd 和 c.xsd 的 a.xml 时,我想以真实的顺序自动检测这些文件。我的意思是,如果 XML 首先使用来自 c.xsd 的命名空间,那么它应该被检测到。在我的示例中,XSD 模式文件及其顺序是通过检查 XML 内部手动编写的。

【问题讨论】:

  • 如何使用自定义实体解析器来查找引用的架构?
  • @ulab 我已经阅读了docs.oracle.com/javase/7/docs/api/org/xml/sax/…,但实际上我无法理解如何申请。你能解释一下吗?
  • 带有这些 XSD 声明的示例 XML 可以提供帮助。你能发个样本吗?
  • @RamachandranGA 请提供任何示例或链接?
  • 实际上我的代码可以工作,但不是“自动化”

标签: java xml xsd


【解决方案1】:

您可以使用LSResourceResolver 来解决架构依赖关系。尽管您必须在此处指定所有依赖项,但它会将代码与架构引用隔离开来。

schemaFactory.setResourceResolver(new LSResourceResolver(){
    @Override
    public LSInput resolveResource(String type, String namespaceURI, String publicId, String systemId, String baseURI) {
            // resovle the path to schema , read and return it.
    }

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2014-06-17
    • 2011-10-28
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多