區分XML中CDATA和#PCDATA

在XML文檔中, 能看到「CDATA"的地方有三處: 

1)在DTD中,指定標籤中某個屬性的類型爲字符型時,使用CDATA。由於XML解析器回去分析這段字符內容,於是裏面若是須要使用>, <, &, ', "這5個特殊字符,應當用對應的替代替代字符來表示(必須以&開始,以;結束)。具體以下: 
< - &lt;  (less than) 
> - &gt;  (greater than) 
& - &amp;  (ampersand) 
' - &apos;  (apostrophe) 
" - &quot;  (straight double quotation mark) 

例如在DTD中聲明: 
    <!ATTLIST author period CDATA> 它表示在author這個標籤中,period屬性應該是字符類型。 


2) 在XML中,指定某段內容沒必要被XML解析器解析時,使用<![CDATA[...]]>。也就是說中括號中的內容解析器不會去分析。因此其中能夠包含>, <, &, ', "這5個特殊字符。常常把一段程序代碼嵌入到<![DATA[...]]>中。 由於代碼中可能包含大量的 >, <, &, "這樣的特殊字符。 

例如在XML中聲明: 
    <![CDATA[ 
        if(i<10){ 
          System.out.println("i<10"); 
        } 
    ]]> 

3) 在DTD中,指定某個標籤中的內容是字符數據時,使用(#PCDATA)。因爲它的內容也是須要解析器來解析的,全部仍然須要轉換>, <, &, ', "這5個特殊字符。 

例如在DTD中聲明: 
    <!ELEMENT name (#PCDATA)> 它表示在<name>和</name>標籤之間能夠插入字符或者子標籤。
 
#PCDATA是要給XML解析的數據,如 > 要寫成 &gt;纔不會出錯。 
CDATA區域表示裏面是什麼數據XML不會解析。
 
【XML中CDATA與#PCDATA與PACATA的區別】
 

1. CDATA: Character Data, PCDATA: Parsableless

CDATA,是能夠分析的字符序列,CDATA就是指字符串,而PCDATA能夠是字符串、子元素、字符串和子元素。  post

2. CDATA是屬性聲明中的類型,就是字符串,&、<、「」和‘’ 等都具備特殊含義被解析,例如:"解析爲雙引號;#PCDATA是元素聲明中的類型,指的是混合類型,便可以包子元素也可包含字符串, &和<也是具備特殊含義被解析。 blog

ANY 並不侷限於「#PCDATA」,只是說明該元素能夠包含任何內容,通常來說,解析器沒法驗證其有效性(通常也不會驗證),#PCDATA源於「可解析的字符」,對於有特殊含於的< 會按照子元素開始進行解析。文檔

#PCDATA    該內容模型說明元素中能夠同時出現文本和元素.
ANY           ANY關鍵子代表DTD中聲明的任何元素均可以使用做該元素的子元素
CDATA       屬性值是字符數據字符串

#PCDATA和ANY用於元素聲明
CDATA用於屬性聲明io

相關文章
相關標籤/搜索