3 回答

TA貢獻2036條經驗 獲得超8個贊
顯然,這個問題純粹是學術性的。幸運的是,它有一個非常明確的答案。
您無法轉義CDATA結束序列。XML 規范的生產規則20 非常明確:
[20] CData ::= (Char* - (Char* ']]>' Char*))
編輯:此產品規則的字面意思是“一個CData節可能包含您想要的任何內容,但順序為']]>'。無例外。”。
EDIT2:同一部分還顯示:
在CDATA節中,只有CDEnd字符串被識別為標記,因此左尖括號和“&”號可能以其原義形式出現;它們不需要(也不能)使用“ <”和“ &” 進行轉義。CDATA節不能嵌套。
換句話說,不可能使用實體引用,標記或任何其他形式的解釋語法。CDATA節中唯一解析的文本是]]>,它終止該節。
因此,不可能]]>在CDATA節中轉義。
EDIT3:同一部分還顯示:
2.7 CDATA節
[定義:CDATA節可能出現在字符數據可能出現的任何地方;它們用于轉義包含字符的文本塊,否則這些字符將被視為標記。CDATA節以字符串“ <![CDATA [”]開頭,以字符串“]]>”:]結尾:]
然后,在可能出現字符數據的任何地方都可能有一個CDATA節,包括多個相鄰的CDATA節,而不是單個CDATA節。這樣就可以拆分]]>令牌并將令牌的兩個部分放在相鄰的CDATA節中。
例如:
<![CDATA[Certain tokens like ]]> can be difficult and <invalid>]]>
應該寫成
<![CDATA[Certain tokens like ]]]]><![CDATA[> can be difficult and <valid>]]>

TA貢獻1786條經驗 獲得超13個贊
您必須將數據分解成部分隱藏起來]]>。
整個過程如下:
<![CDATA[]]]]><![CDATA[>]]>
首先<![CDATA[]]]]>有]]。第二個<![CDATA[>]]>有>。
- 3 回答
- 0 關注
- 671 瀏覽
相關問題推薦
添加回答
舉報