2014-07-22 74 views
0

我有以下的,很簡單的XML文件(顯著削減從原來的回這個問題的目的):實體引入氧引起的Xerces「元素類型...必須聲明」的錯誤

<?xml version="1.0"?> 
    <!DOCTYPE root [ 
    <!ENTITY % entities SYSTEM "test.dtd"> 
    %entities; 
    ]> 

    <root> 
    </root> 

存在文件test.dtd,但同樣爲了這個問題的目的,它是空的。

麻煩的是,氧XML編輯器引發錯誤:

E [Xerces] Element type "root" must be declared. 

如果我刪除%entities;線或從上面的線%符號,不會引發錯誤,因爲氧氣則是不實際解析實體文件(很明顯,當引入真正的實體時,引用它們失敗)。不幸的是,我所做的研究表明,Xerces由於多種不同的原因而拋出了這個錯誤,我無法縮小這種情況下的錯誤。

爲什麼在引入實體時會拋出此錯誤,即使這些實體沒有,我該怎麼辦?

氧氣10.3,如果該事項(我公司只授權給五歲的軟件:-()

+0

你怎麼沒有得到「沒有與文檔相關的模式或DTD」。當你嘗試驗證錯誤?上面的示例沒有出現任何格式錯誤,但它肯定無法驗證,因爲沒有DTD/Schema來驗證。如果我將<!ELEMENT root(#PCDATA)>'添加到內部子集中,它會驗證正確(使用空的'test.dtd')。 (這是在oxygen 15.) –

+0

不知道爲什麼我沒有得到那個錯誤。我並沒有真正嘗試驗證(除了連續自動驗證oXygen做),但我的XML知識不是很好,我不明白爲什麼添加空實體導致它引發錯誤。 我懷疑問題是在oXygen中的一些設置 - Microsoft XML記事本2007(它與我和舊軟件?!;有什麼關係)處理它很好。 – AJR

回答

0

The file test.dtd exists but, again for the purposes of this question, is empty.

你只是得到這個錯誤,因爲即使文件test.dtd正確發現,它不包含任何東西,特別是沒有爲「根」元素沒有聲明這樣的Xerces拋出你的錯誤:

E [Xerces] Element type "root" must be declared.

如果你簡單地聲明<!DOCTYPE root SYSTEM "test.dtd">(這是stricly相當於你什麼上面已經完成),我敢打賭你會得到同樣的錯誤。

相關問題