Pertanyaan Apa artinya dalam XML?


Saya sering menganggap ini aneh CDATA berikan tag XML file:

<![CDATA[some stuff]]>

Saya telah mengamati hal ini CDATA tag selalu muncul di awal, dan kemudian diikuti oleh beberapa hal.

Tetapi terkadang itu digunakan, kadang tidak. Saya berasumsi itu adalah untuk menandai itu some stuff adalah "data" yang akan dimasukkan setelah itu. Tapi apa jenis datanya some stuff? Apakah tidak ada yang saya tulis dalam tag XML semacam data?


803
2018-05-06 20:20


asal


Jawaban:


CDATA berdiri untuk Data Karakter dan itu berarti bahwa data di antara string ini termasuk data itu bisa ditafsirkan sebagai markup XML, tetapi seharusnya tidak.

Perbedaan utama antara CDATA dan komentar adalah:

Ini berarti memberikan tiga potongan XML ini dari satu dokumen yang terbentuk dengan baik:

<!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>

763
2018-05-06 20:23



Bagian CDATA adalah "bagian konten elemen yang ditandai untuk parser untuk menafsirkan hanya sebagai data karakter, bukan markup."

Secara sintaksis, ini berfungsi sama dengan 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>

... tetapi itu masih menjadi bagian dari dokumen:

<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>

Coba simpan yang berikut ini sebagai .xhtml file (tidak  .html) dan buka menggunakan FireFox (bukan Internet Explorer) untuk melihat perbedaan antara komentar dan bagian CDATA; komentar tidak akan muncul ketika Anda melihat dokumen di browser, sementara 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 yang perlu diperhatikan dengan bagian CDATA adalah bahwa mereka tidak memiliki pengkodean, jadi tidak ada cara untuk memasukkan string ]]> di dalamnya. Data karakter apa pun yang berisi ]]> harus - sejauh yang saya tahu - menjadi simpul teks saja. Demikian juga, dari perspektif manipulasi DOM Anda tidak dapat membuat bagian CDATA yang termasuk ]]>:

var myEl = xmlDoc.getElementById("cdata-wrapper");
myEl.appendChild(xmlDoc.createCDATASection("This section cannot contain ]]>"));

Kode manipulasi DOM ini akan membuang pengecualian (di Firefox) atau menghasilkan dokumen XML yang terstruktur buruk: http://jsfiddle.net/9NNHA/


307
2018-05-06 20:35



Satu kasus penggunaan besar: xml Anda menyertakan program, sebagai data (mis. Tutorial laman web untuk Java). Dalam situasi itu, data Anda menyertakan banyak karakter yang mencakup '&' dan '<' tetapi karakter tersebut tidak dimaksudkan untuk menjadi xml.

Membandingkan:

<example-code>
while (x &lt; len &amp;&amp; !done) {
    print( &quot;Still working, &apos;zzz&apos;.&quot; );
    ++x;
    }
</example-code>

dengan

<example-code><![CDATA[
while (x < len && !done) {
    print( "Still working, 'zzzz'." );
    ++x;
    }
]]></example-code>

Terutama jika Anda menyalin / menyisipkan kode ini dari file (atau termasuk itu, dalam pre-processor), itu bagus untuk hanya memiliki karakter yang Anda inginkan dalam file xml Anda, tanpa memusingkan mereka dengan tag / atribut XML. Seperti yang disebutkan oleh @paary, penggunaan umum lainnya termasuk saat Anda menyematkan URL yang berisi ampersand. Akhirnya, bahkan jika data hanya berisi beberapa karakter khusus tetapi datanya sangat sangat panjang (teks bab, katakanlah), itu bagus untuk tidak harus en / de-coding yang beberapa entitas saat Anda mengedit file xml Anda .

(Saya menduga semua perbandingan untuk komentar agak menyesatkan / tidak membantu.)


56
2018-05-28 13:26



Saya pernah menggunakan CDATA ketika tag xml saya diperlukan untuk menyimpan kode HTML. Sesuatu seperti

<codearea>
  <![CDATA[ 
  <div> <p> my para </p> </div> 
  ]]>
</codearea>

Jadi CDATA berarti akan mengabaikan karakter apa pun yang dapat ditafsirkan sebagai tag XML seperti <dan> dll.


33
2018-05-14 04:28



Data yang ada di dalamnya tidak akan diuraikan sebagai XML, dan karena itu tidak perlu XML yang valid atau dapat berisi elemen yang mungkin tampak XML tetapi tidak.


26
2018-05-06 20:23



Dari Wikipedia:

[Dalam] dokumen XML atau entitas parsing eksternal, bagian CDATA adalah a   bagian konten elemen yang ditandai untuk parser untuk menafsirkan   hanya sebagai data karakter, bukan markup.

http://en.wikipedia.org/wiki/CDATA

Jadi: teks di dalam CDATA dilihat oleh parser tetapi hanya sebagai karakter bukan sebagai node XML.


10
2018-01-15 14:49



CDATA adalah singkatan dari Data Karakter. Anda dapat menggunakan ini untuk menghindari beberapa karakter yang jika tidak akan diperlakukan sebagai XML biasa. Data di dalam ini tidak akan diuraikan. Misalnya, jika Anda ingin menyampaikan URL yang berisi & di dalamnya, Anda dapat menggunakan CDATA untuk melakukannya. Jika tidak, Anda akan mendapatkan kesalahan karena akan diuraikan sebagai XML biasa.


7
2018-05-10 04:52



Sebagai contoh lain dari penggunaannya ...

Jika Anda memiliki Umpan RSS (dokumen xml) dan ingin menyertakan beberapa pengkodean HTML dasar dalam tampilan deskripsi, Anda dapat menggunakan CData untuk menyandikannya:

<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>

Pembaca RSS menarik dalam deskripsi dan merender HTML di dalam CDATA.

Catatan - tidak semua tag HTML berfungsi - saya pikir itu tergantung pada RSS reader yang Anda gunakan.


Dan sebagai penjelasan mengapa contoh ini menggunakan CData (bukan tag pubData dan dc: pencipta yang tepat) ... ini untuk tampilan situs web menggunakan widget RSS yang tidak memiliki kontrol pemformatan nyata.

Ini memungkinkan kami untuk menentukan tinggi dan posisi gambar yang disertakan, memformat nama dan tanggal penulis dengan benar, dan seterusnya, tanpa perlu widget baru. Ini juga berarti saya dapat menulis skrip ini dan tidak perlu menambahkannya dengan tangan.


6
2017-09-23 15:44



Ini digunakan untuk memuat data yang bisa dilihat sebagai xml karena mengandung karakter tertentu.

Dengan cara ini data di dalamnya akan ditampilkan, tetapi tidak ditafsirkan.


3
2018-05-06 20:23



Biasanya digunakan untuk menyematkan data khusus, seperti gambar atau data suara dalam dokumen XML.


0
2018-05-06 20:26