2012-07-08 77 views
2

我有這個例子中的XML語法錯誤:如何在XML中包含未解析的外部實體值?

​​

其中data.txt中包含:

1 <15024 
2 >15023 

但我當然有語法錯誤,因爲有在文本文件中WML特殊字符( <>)。那麼如何將這些數據作爲未分析的數據包含在內?

我希望能有這樣的結果:

<?xml version="1.0"?> 
<extract> 
    <data><![CDATA[1 <15024 
2 >15023]]></data> 
</extract> 

回答

1

首先,僅供參考,你指的是一個外部解析一般實體,而不是一個非解析一個。

雖然您的data.txt文件本身不需要格式良好,但它在包含時必須是良構的。由於CDATA部分不能解析實體(包括外部實體),因此必須在外部實體文件本身內部進行轉義(可能通過服務器端處理文件進行轉義,如果不能,則可以將其引用爲外部實體文件)或不希望手動轉義)。

如果您可以控制文件內容並希望手動處理轉義,也許您可​​能可以通過文件本身中的CDATA塊簡單地環繞每個文件的文本,因爲在包含文件時該格式應該是正確的。 (我還沒有嘗試或確認,但似乎它應該工作,因爲再次這樣的實體只需要被包括時良好形成。)

或者,您的其他選擇將逃離<&字符(你除了諷刺的是,在CDATA部分中,如果文本可能包含序列]]> - 如果採取CDATA方法,您可能需要解決這種可能性),通常不需要轉義>。 (由於外部實體不能在屬性中使用,因此您無需擔心轉義'",也沒有提到想要這樣做。)