xml元素類型PCDATA和CDATA的區別(DTD中)


 

PCDATA
PCDATA 的意思是被解析的字符數據(parsed character data)。可把字符數據想象為 XML 元素的開始標簽與結束標簽之間的文本。PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。文本中的標簽會被當作標記來處理,而實體會被展開。不過,被解析的字符數據不應當包含任何 & < > 字符;需要使用 &amp; &lt; &gt; 實體來分別替換它們。


CDATA
CDATA 的意思是字符數據(character data)。CDATA 是不會被解析器解析的文本。在這些文本中的標簽不會被當作標記來對待,其中的實體也不會被展開。
幾個實體引用字符:
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '


又有網上有人這樣說,我覺得挺直觀,先轉過來:
PCDATA表示已解析的字符數據。
CDATA是不通過解析器進行解析的文本,文本中的標簽不被看作標記。CDATA表示里面是什么數據XML不會解析,比如

  1. <![CDATA[ 
  2. if(a>b){ 
  3. System.out.println(a); 
  4. ]]> 


注意上面的a與b之間的 > 符號.

PCDATA的數據是要給xml解析器去解析的,那上面的>去解析肯定會出錯了,所以要用實體定義。上面的數據如果用PCDATA表示應該如下:

  1. if(a&gt;b){  
  2. System.out.println(a);  
  3. }


CDATA是在XML文檔里面使用的關鍵字,用來告訴瀏覽器,這部分內容不用解析,是給其他程序用的,比如js代碼等。CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結束:

  1. <script>  
  2. <![CDATA[  
  3. function matchwo(a,b){  
  4. if (a < b && a < 0){  
  5. return 1;  
  6. }  
  7. else{  
  8. return 0;  
  9. }  
  10. }  
  11. ]]>  
  12. </script>  

#PCDATA是在 XML約束文檔里使用的,如DTD類型的約束文檔,在這里面表示元素的內容或屬性的取值范圍等等,是字符串形式的

  1. <?xml version="1.0"?> 
  2. <!DOCTYPE note [ 
  3.   <!ELEMENT note (to,from,heading,body)
  4.   <!ELEMENT to      (#PCDATA)
  5.   <!ELEMENT from    (#PCDATA)
  6.   <!ELEMENT heading (#PCDATA)
  7.   <!ELEMENT body    (#PCDATA)
  8. ]
  9. <note
  10.   <to>George</to
  11.   <from>John</from
  12.   <heading>Reminder</heading
  13.   <body>Don't forget the meeting!</body
  14. </note


關於實體引用,轉載了一篇文章解釋的比較好:
通過字符和實體引用,可以通過引用將信息加入 XML 文檔,而不必直接在文檔中鍵入字符。在下列情況下,這樣做很有用:
因為會被解釋為標記,字符無法直接輸入文檔。
因為輸入設備的限制,字符無法直接輸入文檔。
字符無法通過限於單字節字符的處理器可靠地傳輸。字符串或文檔片斷反復出現,並且可以縮寫。為了顯示內容,XML 提供了許多語法構造,以“and”符 (&) 開頭,以分號 (;) 結尾。
通過字符引用,可以插入通過指向 Unicode 代碼點的數字標識的 Unicode 字符。代碼點可以使用十進制或十六進制表示法標識。
用於十進制引用的語法:    &#value;
用於十六進制引用的語法:  &#xvalue;

例如,要插入歐元符號,許多鍵盤上仍沒有該字符,可以將 &#x20AC; 或 &#8364; 插入文檔。
下表為 XML 標記使用的字符列出了五種內置實體。實體 實體引用 含義

實體 實體引用 含義
lt
&lt;
<(小於號)
gt
&gt;
>(大於號)
amp
&amp;
&(“and”符)
apos
&apos;
'(撇號或單引號)
quot
&quot;
"(雙引號)


如果字符可能會使 XML 分析器錯誤地解釋文檔結構,請使用實體,而不要鍵入字符。&apos; 和 &quot; 實體引用最常用在屬性值中。

 

 

例一: 雙引號的使用。

 

 

 

雙引號作為XML 屬性值的開始結束符號,因此無法在值中直接使用"". 處理方式可以分為兩種。

 

 

 a: 屬性值中沒有'(單引號) ,那么可以用單引號'' 作為屬性值的開始結束符號

 

 

<add key="IPhone" value="apple"/>  ...屬性值為 ("apple").

 

 

解決:  <add key="IPhone" value=’"apple"‘/> 

 

 

 b: 屬性值中有'(單引號) ,也有雙引號。 如...屬性值為 ("'apple").

<add key="IPhone" value="&quot;&apos;apple&quot;"/>  


免責聲明!

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



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