2013-01-12 47 views
0

我有這樣的XML代碼聲明外部DTD實體:PEReference錯誤與XML外部ENITITY DTD

<!DOCTYPE customers [ 
<!ENTITY % itemCodes SYSTEM "codes.dtd"> 
%itemCodes; 
]> 

這僅僅是從調用了一些預先寫好的代碼codes.dtd

<!ENTITY DCT5Z "Tapan Digital Camera 5 Mpx - zoom"> 
<!ENTITY SM128 "SmartMedia 128MB Card"> 
<!-- etc. --> 

但我得到這個錯誤:

This page contains the following errors: 

error on line 53 at column 8: PEReference: %itemCodes; not found 

爲什麼會是b è?

回答

0

爲什麼會這樣?

因爲找不到codes.dtd文件。如果您沒有使用某種基於目錄的解析機制,則codes.dtd必須位於正在運行的程序的工作目錄中。

但第53行的錯誤看起來很奇怪。這對於DTD文件來說太過分了。第53行是什麼樣的?

UPDATE:在重新考慮時,問題可能不是codes.dtd找不到,但是正在使用的XML解析器不處理外部實體。 (畢竟,它說沒有找到PE引用本身,而不是它的引用。)這是非驗證解析器的一個相當常見的限制,但錯誤診斷可能更有幫助(「對不起,外部實體引用不被支持「)。

+0

如果你說的是真的,那麼爲什麼DTD文件不能在XML文件所在的目錄中找到?我把所有東西放在一起,只是試圖在Chrome中打開文件。此外,理由行53顯示是因爲DOCTYPE有一些我排除的內部聲明。 – Pori

+0

在這種情況下,我可能誤解了錯誤信息。我將添加更新。 – arayq2

+0

Chrome的XML支持不是很有限嗎?如果你把整個內部子集放到另一個dtd文件中,並且只有'<!DOCTYPE customers SYSTEM「external.dtd」>',你可以發現是否支持外部實體。 – arayq2