2012-04-18 56 views
0

我正在創建一個eclipse rcp應用程序,我正在使用SAXParser來解析XML文檔。該「EventsDefinition.xsd」這我使用驗證XML文檔以下導入:如何告訴解析器在哪裏查找xml.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」本地副本。

任何建議將非常有幫助。

回答

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。它可能,但不需要聲明,也不能綁定到任何其他名稱空間名稱。其他前綴不能綁定到這個名稱空間名稱,也不能將其聲明爲默認名稱空間。

嘗試將名稱空間名稱重命名爲其他名稱(以及命名空間前綴)。希望能幫助到你。

+0

我嘗試重命名命名空間名稱和命名空間前綴後,但它不起作用。 – 2012-04-19 07:18:22

+0

事實上,我必須在我的rcp應用程序的eclipse文件夾中使用本地「xml.xsd」副本。它適用於從eclipse文件夾(其中存在xml.xsd文件)執行應用程序時,但是當我從其他目錄執行它時,它無法找到xml.xsd的相對位置。我只需要找到一種方法來通知解析器在哪裏尋找由我的EventsDefinition.xsd引用的「xml.xsd」。 – 2012-04-19 07:40:59

相關問題