3

您可以使用 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")));

没有太多的运气。

4

1 回答 1

5

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

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

如果您查看此方法的 Javadoc,您可以阅读

目录 - 绝对 URI 的有序数组列表

这不是您使用的。

第二个问题在这里

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

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

new StreamSource(ClassLoader.getSystemResource("config.xsd").toString())
于 2009-06-11T20:31:57.020 回答