![CDATA[ ]]
問(wèn)題引入:
最近在開(kāi)發(fā)webservice + xml協(xié)議的接口時(shí)發(fā)現(xiàn)一個(gè)問(wèn)題:webservice配置文件如上圖所示(生成請(qǐng)求xml報(bào)文的原理:解析requestSameSpace標(biāo)簽和variableSameSpace標(biāo)簽下的內(nèi)容,將其合并為一個(gè)完整的請(qǐng)求報(bào)文),當(dāng)我把xml格式的文本使用<![CDATA[ ]]> 包裹起來(lái)的時(shí)候能生成正確xml格式的報(bào)文;而如果不使用<![CDATA[ ]]> 來(lái)包裹,盡管你在webservice的配置文件中是以xml格式定義的文本,但是生成的報(bào)文卻是map格式的。報(bào)文如下圖所示:
生成的錯(cuò)誤的map格式的報(bào)文:
生成的正確的xml格式的報(bào)文:
CDATA
這就促使我去查了一些資料,有關(guān)<![CDATA[ ]]> 的用途,整理如下:
CDATA的定義:
CDATA DTD的屬性類型,全名character data,指不由xml解析器進(jìn)行解析的文本數(shù)據(jù)。在標(biāo)記的CDATA下,所有的標(biāo)記、實(shí)體引用(特殊字符)都會(huì)被忽略,而被當(dāng)作字符數(shù)據(jù)來(lái)看待。
CDATA的形式:
CDATA的形式如下: <![CDATA[文本內(nèi)容]]> CDATA的文本內(nèi)容中不能出現(xiàn)字符串“]]>”,也不能嵌套。 CDATA區(qū)域是由“<![CDATA["為開(kāi)始標(biāo)記,以“]]>”為結(jié)束標(biāo)記,注意CDATA為大寫(xiě)。
DTD實(shí)例:
指定類型為CDATA以后就可以在XML中被用于實(shí)例,例如下面payment 元素的type屬性被指定為CDATA類型后在XML中就可以賦于”check”的字符數(shù)據(jù)。
<!ATTLIST payment type CDATA "check">XML 實(shí)例:
在CDATA標(biāo)記中的信息被解析器原封不動(dòng)地傳給應(yīng)用程序,并且不解析該段信息中的任何控制標(biāo)記。例如:
<name><first>Bill</first><last>Gates</last></name>而解析器會(huì)把它分解為像這樣的子元素:
<name> <first>Bill</first> <last>Gates</last> </name>轉(zhuǎn)義字符:
非法的xml字符必須被替換為實(shí)體引用(entity reference)。如果在XML文檔中使用類似”< ” 的字符, 那么解析器將會(huì)出現(xiàn)錯(cuò)誤,因?yàn)榻馕銎鲿?huì)認(rèn)為這是一個(gè)新元素的開(kāi)始。所以不應(yīng)該象下面那樣書(shū)寫(xiě)代碼:
<message>if salary < 1000 then</message>為了避免出現(xiàn)這種情況,必須將字符”< ” 轉(zhuǎn)換成實(shí)體,象下面這樣:
<message>if salary < 1000 then</message>在 XML 中有 5 個(gè)預(yù)定義的實(shí)體引用:
< < 小于號(hào) > > 大于號(hào) & & 與(和)號(hào) ' ' 單引號(hào) " " 雙引號(hào)注釋:嚴(yán)格地講,在 XML 中僅有字符 “<”和”&” 是非法的。省略號(hào)、引號(hào)和大于號(hào)是合法的,但是把它們替換為實(shí)體引用是個(gè)好的習(xí)慣。
PS:有關(guān)如何使用webservice + xml協(xié)議開(kāi)發(fā)接口,隨后我會(huì)繼續(xù)給出一篇開(kāi)發(fā)指南。
總結(jié)
以上是生活随笔為你收集整理的![CDATA[ ]]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【深入理解JVM】JVM垃圾回收机制
- 下一篇: 【Tuxedo】Tuxedo入门