首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMLCatalog可以用于模式导入吗?

XMLCatalog可以用于模式导入吗?
EN

Stack Overflow用户
提问于 2009-06-11 14:19:51
回答 1查看 999关注 0票数 3

您可以使用XMLCatalog来解析模式导入语句中的xsds吗?如果是,首选/最佳实践是什么?我想将xsds打包到jar中,所以使用相对schemaLocation是行不通的。

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

代码语言:javascript
复制
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")));

没有太多的运气。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-11 20:31:57

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

代码语言:javascript
复制
XMLCatalogResolver catalogResolver = new XMLCatalogResolver(
        new String[]{"catalog.xml"});

如果你查看the Javadoc for this method,你可以读到

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

这不是你要用的。

第二个问题在这里

代码语言:javascript
复制
Schema schema = factory.newSchema(new StreamSource(ClassLoader
        .getSystemResourceAsStream("config.xsd")));

您没有为模式设置系统id,所以如果您有一个导入的相对位置,那么它将相对于您的应用程序的当前目录进行解析,而不是相对于您的模式文件所在的目录。您需要在源上调用setSystemId,或者在创建源时传递系统id:

代码语言:javascript
复制
new StreamSource(ClassLoader.getSystemResource("config.xsd").toString())
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/981382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档