CDATA 區段 因為網頁中要顯示
HTML的源代碼。而在
XML中,要實現這樣的功能,就必須使用
CDATA標記。在
CDATA標記中的信息被解析器原封不動地傳給應用程序,并且不解析該段信息中的任何控制標記。
CDATA區域是由:
“〈
![CDATA[”為開始標記,以
“]]〉
”為結束標記。例如:例
2中的源碼,除了
“〈
![CDATA[”和
“]]〉
”符號,其余的內容解析器將原封不動地交給下游的應用程序,即使
CDATA區域中的開始和結尾的空白以及換行字符等,都同樣會被轉交(注意
CDATA是大寫的字符)。
如同你在第三章中學到的,你不能直接將(<)或(&)符號放置在元素內容中的字符數據里。要避開這個限制的一種方法是使用字符參照(& #60;或& #38;)或預先定義的普通實體參照(& lt;或& amp;),如同你在第六章中將學到的。然而,如果你需要加入多個(<)或(&)字符,使用這些參照將變得不合適且會讓資料變得難以閱讀。在這種情況下,將包含限制字符的文字放置在CDATA 區段中將會比較容易完成工作。
CDATA 區段的類型
CDATA 區段以字符「<![CDATA[」開始,并以「]]>」字符結束。在這兩個定義符號之間,你可以輸入任何字符(包括「<」或「&」),除了「]]>」之外。(因為,該字符會被解釋成CDATA區段的結束。)所有位在CDATA 區段中的字符都被視為元素字符數據的字義 (literal) 部分,而不是XML 標簽。
下面是一個合法CDATA 區段的范例:
<![CDATA [
Here you can type any characters except two right brackets followed
by a greater-than symbol.
]]>
注意
關鍵詞CDATA,就像其它你所見到的XML 關鍵詞,必須以大寫字母撰寫。
如果你想包含一段原始碼或標簽當作被顯示在瀏覽器中元素的真實字符數據的一部份,你可以使用CDATA 區段來防止XML 解析器將「<」或「&」字符解釋成XML 卷標。下面就是一個范例:
<A-SECTION>
The following is an example of a very simple HTML page:
<![CDATA[
<HTML>
<HEAD>
<T99vLE>R.Jones &Sons</T99vLE>
</HEAD>
<BODY>
<P>Welcome to our home page!</P>
</BODY>
</HTML>
]]>
</A-SECTION>
例如,若沒有CDATA 區段,處理器會假設<HTML>是套迭的元素的起始部分,而不是A-SECTION 元素的字符數據的起始部分。
注意
既然你可以直接將「<」與「&」字符加入CDATA 區段中,你就不必使用字符參照(& #60;與&)或預先定義的普通實體參照(& lt;與& amp;),筆者將在第六章中解釋字符參照與實體參照。事實上,如果你使用這類的參照,解析器會將參照中的每個字符照字面解釋,且不會更換掉含有「<」或「&」字符的參照。
你可以放置CDATA 區段的地方
你可以將CDATA 區段放置在字符數據可以出現的任何地方-也就是說,在元素的內容中卻不在XML 標簽中。下面是一個合法放置CDATA 區段的范例
<?xml version="1.0"?>
<MUSICAL>
<T99vLE_PAGE>
<![CDATA[
<Oklahoma!>
By
Rogers &Hammerstein
]]>
</T99vLE_PAGE>
<!--Other elements here...-->
</MUSICAL>
顯示于下頁的錯誤型式XML 文件包含了兩個違法的CDATA 區段。第一個不是在元素的內容中。第二個則是位在文件元素的內容之中,但卻不是在起始標簽中。
<?xml version="1.0"?>
<![CDATA[ ILLEGAL::not within element content!]]>
<DOC_ELEMENT>
<SUB_ELEMENT <![CDATA[ ILLEGAL::inside of markup!]]>>
sub-element content...
</SUB_ELEMENT>
</DOC_ELEMENT>
注意
CDATA 區段不能成巢狀套迭。亦即,你不能將一個CDATA 區段放到另一個區段中。