0

我正在创建一个使用 SAXParser 解析 XML 文档的 eclipse rcp 应用程序。我用来验证 XML 文档的“EventsDefinition.xsd”具有以下导入:

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

我将“EventsDefinition.xsd”和“xml.xsd”保存在导出的 rcp 产品的 eclipse 文件夹中。

为了访问“EventsDefinition.xsd”,我使用了以下有效的代码。

URL fileURL = new URL(Platform.getInstallLocation().getURL() + "EventsDefinition.xsd");

File eventsDefinitionFile = new File(fileURL.getPath());

parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", eventsDefinitionFile);

这样,解析器就能够访问“EventsDefinition.xsd”,但不能访问它所引用的“xml.xsd”,因为它试图找到相对于执行 rcp 应用程序的目录的 xml.xsd。

有没有类似的方法告诉解析器在 eclipse 文件夹而不是在当前工作目录中找到“xml.xsd”?

我尝试在 EventsDefinition.xsd 中指定 schemaLocation="http://www.w3.org/2001/xml.xsd",但它无法读取架构。所以我必须使用导出产品的 eclipse 文件夹中存在的“xml.xsd”的本地副本。

任何建议都会非常有帮助。

4

1 回答 1

0

我认为问题出在进口声明上。首先,虽然允许,但不建议使用“命名空间”作为命名空间前缀。其次,问题在于您使用“http://www.w3.org/XML/1998/namespace”作为命名空间名称,这是被禁止的。看看这里:http ://www.w3.org/TR/REC-xml-names/#dt-prefix ,正是在这里:

前缀 xml 根据定义绑定到命名空间名称http://www.w3.org/XML/1998/namespace。它可以,但不需要,被声明,并且不能被绑定到任何其他命名空间名称。其他前缀不得绑定到此名称空间名称,并且不得将其声明为默认名称空间。

尝试将命名空间名称重命名为其他名称(以及命名空间前缀)。希望能帮助到你。

于 2012-04-18T12:19:14.510 回答