gpt4 book ai didi

java - XMLCatalog 可以用于模式导入吗?

转载 作者:数据小太阳 更新时间:2023-10-29 02:25:20 24 4
gpt4 key购买 nike

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

运气不好。

最佳答案

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

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

如果你看the Javadoc for this method你可以阅读

catalogs - an ordered array list of absolute URIs

这不是你用的。

第二个问题在这里

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

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

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

关于java - XMLCatalog 可以用于模式导入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/981382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com