區分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: Parsable

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

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

ANY 並不局限於“#PCDATA”,只是說明該元素可以包含任何內容,一般來講,解析器無法驗證其有效性(一般也不會驗證),#PCDATA源於“可解析的字符”,對於有特殊含於的< 會按照子元素開始進行解析。

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM