Saya sering menemukan hal aneh CDATA
tag `XML file:
<![CDATA[some stuff]]>
Saya telah mengamati bahwa ini CDATA
tag selalu datang di awal, dan kemudian diikuti oleh beberapa hal.
Tapi kadang-kadang hal ini digunakan, kadang-kadang tidak. Saya menganggap itu adalah untuk menandai bahwa barang
adalah "data" yang akan dimasukkan setelah itu. Tapi apa jenis data adalah barang
? Isn't apa-apa saya menulis dalam tag XML beberapa jenis data?
CDATA singkatan Data Karakter dan itu berarti bahwa data di antara string ini termasuk data yang bisa diartikan sebagai markup XML, tapi tidak harus.
Perbedaan utama antara CDATA dan komentar adalah:
]]>
(CDEnd
), sementara di komentar --
adalah tidak valid.Ini berarti diberikan tiga cuplikan dari XML dari satu well-formed dokumen:
<!ENTITY MyParamEntity "Has been expanded">
<!--
Within this comment I can use ]]>
and other reserved characters like <
&, ', and ", but %MyParamEntity; will not be expanded
(if I retrieve the text of this node it will contain
%MyParamEntity; and not "Has been expanded")
and I can't place two dashes next to each other.
-->
<![CDATA[
Within this Character Data block I can
use double dashes as much as I want (along with <, &, ', and ")
*and* %MyParamEntity; will be expanded to the text
"Has been expanded" ... however, I can't use
the CEND sequence. If I need to use CEND I must escape one of the
brackets or the greater-than sign using concatenated CDATA sections.
]]>
<description>An example of escaped CENDs</description>
<!-- This text contains a CEND ]]> -->
<!-- In this first case we put the ]] at the end of the first CDATA block
and the > in the second CDATA block -->
<data><![CDATA[This text contains a CEND ]]]]><![CDATA[>]]></data>
<!-- In this second case we put a ] at the end of the first CDATA block
and the ]> in the second CDATA block -->
<alternative><![CDATA[This text contains a CEND ]]]><![CDATA[]>]]></alternative>
Bagian CDATA adalah "bagian dari elemen konten yang ditandai untuk parser untuk menafsirkan karena hanya data karakter, tidak markup."
Sintaksis, berperilaku demikian pula komentar:
<exampleOfAComment>
<!--
Since this is a comment
I can use all sorts of reserved characters
like > < " and &
or write things like
<foo></bar>
but my document is still well-formed!
-->
</exampleOfAComment>
... tapi itu masih merupakan bagian dari dokumen tersebut:
<exampleOfACDATA>
<![CDATA[
Since this is a CDATA section
I can use all sorts of reserved characters
like > < " and &
or write things like
<foo></bar>
but my document is still well formed!
]]>
</exampleOfACDATA>
Mencoba menyimpan sebagai berikut .xhtml
file (not .html
) dan buka menggunakan FireFox (not Internet Explorer) untuk melihat perbedaan antara komentar dan bagian CDATA; komentar tidak't muncul ketika anda melihat dokumen di browser, sedangkan bagian CDATA akan:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
<head>
<title>CDATA Example</title>
</head>
<body>
<h2>Using a Comment</h2>
<div id="commentExample">
<!--
You won't see this in the document
and can use reserved characters like
< > & "
-->
</div>
<h2>Using a CDATA Section</h2>
<div id="cdataExample">
<![CDATA[
You will see this in the document
and can use reserved characters like
< > & "
]]>
</div>
</body>
</html>
Sesuatu untuk mengambil catatan dengan bagian CDATA adalah bahwa mereka tidak memiliki encoding, sehingga ada's tidak ada cara untuk memasukkan string ]]>
di dalamnya. Setiap karakter data yang berisi ]]>
akan memiliki untuk - sejauh yang saya tahu - menjadi teks node sebagai gantinya. Demikian juga, dari DOM manipulasi perspektif anda dapat't membuat CDATA bagian yang meliputi ]]>
:
var myEl = xmlDoc.getElementById("cdata-wrapper");
myEl.appendChild(xmlDoc.createCDATASection("This section cannot contain ]]>"));
Ini manipulasi DOM kode akan melempar pengecualian (di Firefox) atau mengakibatkan kurang terstruktur dokumen XML:
Satu use case: xml anda termasuk program, seperti data (misalnya halaman web tutorial untuk Jawa). Dalam situasi itu data anda meliputi sebagian besar dari karakter yang meliputi '&' dan '<' tapi karakter-karakter aren't dimaksudkan untuk menjadi xml.
Bandingkan:
<example-code>
while (x < len && !done) {
print( "Still working, 'zzz'." );
++x;
}
</example-code>
dengan
<example-code><![CDATA[
while (x < len && !done) {
print( "Still working, 'zzzz'." );
++x;
}
]]></example-code>
Terutama jika anda copy/paste kode ini dari sebuah file (atau seperti itu, dalam pre-processor), it's menyenangkan untuk hanya memiliki karakter yang anda inginkan di file xml, w/o membingungkan mereka dengan XML tag/atribut. Seperti @paary disebutkan, penggunaan umum lainnya termasuk bila anda're embedding Url yang mengandung ampersands. Akhirnya, bahkan jika data hanya berisi beberapa karakter khusus tetapi data sangat lama (teks bab, mengatakan), it's bagus tidak harus en/de-coding mereka beberapa entitas seperti anda mengedit file xml.
(Saya menduga semua perbandingan untuk komentar yang agak menyesatkan/membantu.)
Saya pernah menggunakan CDATA ketika saya elemen xml yang diperlukan untuk menyimpan kode HTML. Sesuatu seperti
<codearea>
<![CDATA[
<div> <p> my para </p> </div>
]]>
</codearea>
Jadi CDATA berarti akan mengabaikan karakter yang sebaliknya bisa diartikan sebagai XML tag < dan > dll.
Dari Wikipedia:
[Di] sebuah dokumen XML atau eksternal diurai badan, bagian CDATA adalah bagian dari elemen konten yang ditandai untuk parser untuk menafsirkan karena hanya data karakter, tidak markup.
Dengan demikian: teks dalam CDATA dilihat oleh parser tetapi hanya sebagai karakter bukan sebagai node XML.
Sebagai contoh lain dari penggunaannya:
Jika anda memiliki RSS Feed (dokumen xml) dan ingin memasukkan beberapa dasar HTML encoding dalam tampilan deskripsi, anda dapat menggunakan CData untuk encode:
<item>
<title>Title of Feed Item</title>
<link>/mylink/article1</link>
<description>
<![CDATA[
<p>
<a href="/mylink/article1"><img style="float: left; margin-right: 5px;" height="80" src="/mylink/image" alt=""/></a>
Author Names
<br/><em>Date</em>
<br/>Paragraph of text describing the article to be displayed</p>
]]>
</description>
</item>
RSS Reader menarik dalam deskripsi dan merender HTML dalam CDATA.
Catatan - tidak semua tag HTML yang bekerja - saya pikir itu tergantung pada RSS reader yang anda gunakan.
Dan sebagai penjelasan mengapa contoh ini menggunakan CData (dan tidak sesuai pubData dan dc:creator tag): ini adalah tampilan website menggunakan RSS widget yang kita tidak memiliki real format control.
Hal ini memungkinkan kita untuk menentukan ketinggian dan posisi termasuk gambar, format nama penulis dan tanggal dengan benar, dan sebagainya, tanpa perlu untuk widget baru. Itu juga berarti saya dapat script ini dan tidak perlu menambahkan mereka dengan tangan.
CDATA singkatan Data Karakter. Anda dapat menggunakan ini untuk melarikan diri beberapa karakter yang jika tidak akan diperlakukan seperti biasa XML. Data dalam hal ini tidak akan diuraikan.
Misalnya, jika anda ingin lulus URL yang berisi &
di dalamnya, anda dapat menggunakan CDATA untuk melakukannya. Jika tidak, anda akan mendapatkan error seperti ini akan diurai seperti biasa XML.
Lolos string yang tidak dapat dilewatkan ke XML seperti biasa:
Contoh:
String yang berisi "&" dalam hal itu.
Anda tidak dapat:
<FL val="Company Name">Dolce & Gabbana</FL>
Oleh karena itu, anda harus menggunakan CDATA:
<FL val="Company Name"> <![CDATA["Dolce & Gabbana"]]> </FL>
Yang Cdata adalah data yang anda mungkin ingin lolos ke xml parser dan masih tidak diartikan sebagai aplikasi xml.
Katakan misalnya :- Anda memiliki xml yang telah merangkum pertanyaan/jawaban objek . Seperti lapangan terbuka dapat memiliki data yang tidak benar-benar jatuh di bawah data dasar tipe atau xml yang didefinisikan kustom jenis data. Seperti - ini Adalah sebuah tag yang benar untuk xml komentar <!Komentar--> ? .-- Anda mungkin memiliki persyaratan untuk lulus seperti itu tanpa ditafsirkan oleh xml parser seperti anak lain elemen. Di sini Cdata datang untuk menyelamatkan anda . Dengan menyatakan sebagai Cdata anda mengatakan parser don't memperlakukan data-data yang dibungkus seperti xml (meskipun itu mungkin terlihat seperti satu )