【问题标题】:Can XMLCatalog be used for schema imports?XMLCatalog 可以用于模式导入吗?
【发布时间】:2010-11-02 03:44:16
【问题描述】:

您可以使用 XMLCatalog 来解析架构导入语句中的 xsds 吗?如果是这样,首选/最佳做法是什么?我想将 xsds 打包到 jar 中,因此使用相对 schemaLocation 不起作用。

到目前为止,我正在尝试做类似的事情:

SchemaFactory factory = SchemaFactory
        .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
        new String[]{"/path/to/catalog.xml"});
factory.setResourceResolver(catalogResolver);

Schema schema = factory.newSchema(new StreamSource(ClassLoader
        .getSystemResourceAsStream("config.xsd")));

运气不好。

【问题讨论】:

    标签: java xml schema xmlcatalog


    【解决方案1】:

    快速浏览一下,我发现了两个问题:

    XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
            new String[]{"catalog.xml"});
    

    如果您查看the Javadoc for this method,您可以阅读

    catalogs - 一个有序数组列表 绝对 URI

    这不是你使用的。

    第二个问题来了

    Schema schema = factory.newSchema(new StreamSource(ClassLoader
            .getSystemResourceAsStream("config.xsd")));
    

    您没有为架构设置系统 ID,因此如果您有导入的相对位置,那么它将相对于您的应用程序的当前目录而不是您拥有架构文件的目录进行解析。您需要在源上调用 setSystemId 或在创建时传递系统 ID:

    new StreamSource(ClassLoader.getSystemResource("config.xsd").toString())
    

    【讨论】:

    • 感谢您的帮助。如果文件在 jar 中,相对查找会起作用吗?一旦我 jar'd xsds,它就失败了。
    猜你喜欢
    • 2016-11-18
    • 2016-07-30
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2015-09-23
    • 2022-08-15
    • 1970-01-01
    • 2020-03-22
    相关资源
    最近更新 更多