我正在创建一个eclipse rcp应用程序,我在其中使用SAXParser来解析XML文档。我用来验证XML文档的“EventsDefinition.xsd”有以下导入:
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
schemaLocation="xml.xsd"/>
我保留了“EventsDefinition.xsd”&amp;导出的rcp产品的eclipse文件夹中的“xml.xsd”。
为了访问“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”的本地副本。
任何建议都会非常有用。
答案 0 :(得分:0)
我认为问题在于进口申报。首先,虽然允许,但不建议使用“namespace”作为名称空间前缀。其次,问题出现在您使用“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。它可以但不必声明,并且不得绑定到任何其他命名空间名称。其他前缀不得绑定到此命名空间名称,并且不得将其声明为默认命名空间。
尝试将命名空间名称重命名为其他名称(以及名称空间前缀)。希望它有所帮助。