当前位置: 首页 > 知识库问答 >
问题:

将XJC与xml.xsd导入一起使用时出错:“无法读取架构文档'xml.xsd'”

袁翰池
2023-03-14

我试图在第三方的模式文件上运行xjc(它是Amazon.com的产品API)。我遇到了麻烦,因为对于其中一个文件default.xsd,xjc忽略了以下导入(它是模式声明之后的第一个导入):

<import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd" />

[警告]schema_reference.4:无法读取架构文档“xml.xsd”,因为1)找不到该文档;2)无法读取该文档;3)文档的根元素不是。文件:/c://temp/amazon/default.xsd的第9行

[ERROR]src-resolve:无法将名称“xml:lang”解析为(n)个“属性声明”组件。文件:/c://temp/amazon/default.xsd的第119行

我尝试将xml.xsd文件从http://www.w3.org/2001/03/xml.xsd下载到包含这些模式文件的目录中,并再次运行该命令,但是xml.xsd不能验证:

我正要开始深入到为什么这个不能被验证的兔子洞,但决定推迟,因为我认为我错过了一些非常简单或微小的东西。我需要手动包含xml.xsd导入吗?还是我遗漏了其他内容?

我正在使用的模式的URL当前如下所示:

http://g-ecx.images-amazon.com/images/g/01/mwsportal/doc/en_美国/products/default.xsd

我只是用:

xjc dirname或xjc filename来逐个解析它们

共有1个答案

江智
2023-03-14

我下载了您的XSD文件来模拟错误,实际上,当按原样下载时,它们给出的正是您报告的错误。

目前还不清楚发生了什么。是的,XML命名空间http://www.w3.org/XML/1998/namespace是特殊的和保留的。您不必声明它就可以使其存在,但xml.XSD文件用于遵循模式,以便这些预定义类型也在XSD模式中定义,以便在使用模式时可以使用这些类型。

因此,我首先想到的是XML命名空间需要声明为xmlns:XML=“http://www.w3.org/XML/1998/namespace”(通常从来不需要这样做),以便XJC正常运行,但这并没有太大变化。

经过一番反复,我决定使用-nv选项运行xjc,这将转换某些严格的验证规则。这一次,我收到的错误更清楚了一点,并立即指出了原因,以及显而易见的解决方案

[ERROR]无法检索“file://d://projects/xyz/xmlschema.dtd”:java.io.FileNotFoundException:d:\projects\xyz\xmlschema.dtd(系统找不到指定的文件)文件:/d://projects/xyz/xml.xsd的第2行

显然,XJC尝试下载DOCTYPE声明引用的DTD:

<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA 200102//EN" "XMLSchema.dtd" >

实际上,这不是XJC,而是XSD验证之前的XML解析器。所使用的XML解析器是一个验证解析器,这意味着它试图找到DTD,如果找不到,它就会中断。您收到的错误不是很有帮助,但是正确的,因为在XML术语中,指向DTD的XML文件不是有效的XML文件(但它可以是格式良好的XML文件,非验证的XML处理器(不要与XSD模式验证混淆)只会加载XML)。

但是,认为XML是正确的并不需要DTD。您可以下载XMLSchma DTD,或者更简单地删除该行,处理就会成功,无论是否使用-nv开关。

 类似资料:
  • 我的猜测是我没有以正确的方式声明模式文档,但我不知道错误到底在哪里。我做错了什么?

  • 我的spring-security.xml是 忽略XML验证警告org.XML.sax.saxParseException:schema_reference.4:无法读取架构文档“http://www.springframework.org/schema/security/spring-security-3.2.xsd”,因为1)找不到文档;2)无法读取文档;3)文档的根元素不是。 我导入的库是:

  • 问题内容: 我无法让wsgi导入项目“ mofin”的设置文件。 apache错误日志中的错误列表如下 我得到了“你好,世界!” 此处列出的wsgi应用程序(http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide)可以正常工作。 与应用程序一样,settings.py文件也可以通过python manage.py(runserve

  • 但现在,当我将头中的两个位置中的“3.8”替换为“3.5”时,它就会成功执行。我只想用3.8来执行。请帮帮忙。

  • 我尝试安装java并使用XLConnect包mmethods(两者都是),但是我得到了如下所示的错误: 我绝对不是试图加载一个空文件,我绝对有访问/权限从文件位置读取。我可能做错了什么? R read_excel:libxls错误:无法解析文件

  • 我正在使用数据来显示来自服务器的数据。问题是我一直在控制台上得到一个错误,说: 我已经访问了互联网上与此相关的每一个链接,但对我来说没有任何效果。 我已经确保了使用colspans的thead和tbody中的列数是相同的。 我可能遗漏了一些东西,但在花了相当长的时间之后,我会感谢您的帮助。 下面是代码的样子 HTML: JS