Frage Was bedeutet in XML?


Ich finde das oft komisch CDATA eintippen XML Dateien:

<![CDATA[some stuff]]>

Ich habe das beobachtet CDATA Tag kommt immer am Anfang, und dann folgen einige Sachen.

Aber manchmal wird es benutzt, manchmal nicht. Ich nehme an, es ist das zu markieren some stuff sind die "Daten", die danach eingefügt werden. Aber was für Daten sind das? some stuff? Ist nichts, was ich schreibe in XML-Tags irgendeine Art von Daten?


803
2018-05-06 20:20


Ursprung


Antworten:


CDATA steht für Zeichendaten und es bedeutet, dass die Daten zwischen diesen Strings Daten enthalten, die könnte als XML-Markup interpretiert werden, sollte es aber nicht sein.

Die wichtigsten Unterschiede zwischen CDATA und Kommentaren sind:

Dies bedeutet, dass diese drei XML-Schnipsel aus einem wohlgeformten Dokument stammen:

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



Ein CDATA-Abschnitt ist "ein Abschnitt des Elementinhalts, der für den Parser markiert ist, um ihn nur als Zeichendaten und nicht als Markup zu interpretieren."

Syntaktisch verhält es sich ähnlich wie ein Kommentar:

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

... aber es ist immer noch Teil des Dokuments:

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

Versuchen Sie Folgendes zu speichern: a .xhtml Datei (nicht  .html) und öffne es mit FireFox (nicht Internet Explorer) um den Unterschied zwischen dem Kommentar und dem CDATA-Abschnitt zu sehen; Der Kommentar wird nicht angezeigt, wenn Sie das Dokument in einem Browser betrachten, während der CDATA-Abschnitt:

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

Etwas, das bei CDATA-Abschnitten beachtet werden muss, ist, dass sie keine Codierung haben, daher gibt es keine Möglichkeit, die Zeichenfolge einzuschließen ]]> in ihnen. Alle Zeichendaten, die enthalten ]]> muss - soweit ich weiß - stattdessen ein Textknoten sein. Aus DOM-Perspektive können Sie auch keinen CDATA-Abschnitt erstellen, der Folgendes enthält ]]>:

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

Dieser DOM-Manipulationscode löst entweder eine Ausnahme aus (in Firefox) oder führt zu einem schlecht strukturierten XML-Dokument: http://jsfiddle.net/9NNHA/


307
2018-05-06 20:35



Ein großer Anwendungsfall: Ihre XML-Datei enthält ein Programm als Daten (z. B. ein Web-Seiten-Lernprogramm für Java). In dieser Situation enthalten Ihre Daten einen großen Teil der Zeichen, die "&" und "<" enthalten, aber diese Zeichen sind nicht als XML gedacht.

Vergleichen:

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

mit

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

Besonders wenn Sie diesen Code aus einer Datei kopieren (oder sie in einen Preprozessor einbinden), ist es nett, nur die gewünschten Zeichen in Ihrer XML-Datei zu haben, ohne sie mit XML-Tags / Attributen zu verwechseln. Wie von @pairy erwähnt, werden häufig verwendete URLs verwendet, wenn Sie URLs einbetten, die Et-Zeichen enthalten. Schließlich, auch wenn die Daten nur ein paar Sonderzeichen enthalten, aber die Daten sehr lang sind (zum Beispiel der Text eines Kapitels), ist es nett, diese wenigen Entitäten beim Bearbeiten der XML-Datei nicht de- / decodieren zu müssen .

(Ich vermute, dass alle Vergleiche mit Kommentaren irgendwie irreführend / wenig hilfreich sind.)


56
2018-05-28 13:26



Ich musste einmal CDATA verwenden, wenn mein XML-Tag HTML-Code speichern musste. Etwas wie

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

CDATA bedeutet also, dass jedes Zeichen ignoriert wird, das ansonsten als XML-Tag wie <und> usw. interpretiert werden könnte.


33
2018-05-14 04:28



Die darin enthaltenen Daten werden nicht als XML analysiert und müssen daher kein gültiger XML-Code sein oder Elemente enthalten, die möglicherweise XML-Code sind, aber nicht.


26
2018-05-06 20:23



Aus Wikipedia:

[In] einem XML-Dokument oder einer extern analysierten Entität ist ein CDATA-Abschnitt ein   Abschnitt des Elementinhalts, der für den Parser zum Interpretieren markiert ist   als nur Zeichendaten, nicht Markup.

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

Also: Text innerhalb von CDATA wird vom Parser gesehen, aber nur als Zeichen, nicht als XML-Knoten.


10
2018-01-15 14:49



CDATA steht für Character Data. Sie können damit einige Zeichen umgehen, die ansonsten als reguläres XML behandelt werden. Die Daten darin werden nicht analysiert. Wenn Sie beispielsweise eine URL übergeben möchten, die Folgendes enthält & Sie können dazu CDATA verwenden. Andernfalls erhalten Sie einen Fehler, da er als normales XML analysiert wird.


7
2018-05-10 04:52



Als ein weiteres Beispiel für die Verwendung ...

Wenn Sie einen RSS-Feed (XML-Dokument) haben und eine einfache HTML-Codierung in die Anzeige der Beschreibung einbeziehen möchten, können Sie CData verwenden, um sie zu codieren:

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

Der RSS Reader zieht die Beschreibung ein und rendert den HTML-Code innerhalb des CDATA.

Hinweis - nicht alle HTML-Tags funktionieren - ich denke, es hängt vom verwendeten RSS-Reader ab.


Und als Erklärung dafür, warum dieses Beispiel CData verwendet (und nicht die entsprechenden Tags pubData und dc: creator) ... ist dies für die Anzeige von Webseiten mit einem RSS-Widget, für das wir keine echte Formatierungskontrolle haben.

Dies ermöglicht uns, die Höhe und Position des enthaltenen Bildes anzugeben, die Namen und das Datum des Autors korrekt zu formatieren, usw., ohne dass ein neues Widget benötigt wird. Es bedeutet auch, dass ich dies skripten kann und nicht von Hand hinzufügen muss.


6
2017-09-23 15:44



Es wird verwendet, um Daten zu enthalten, die sonst als XML angezeigt werden könnten, da sie bestimmte Zeichen enthalten.

Auf diese Weise werden die Daten im Inneren angezeigt, aber nicht interpretiert.


3
2018-05-06 20:23



Wird normalerweise zum Einbetten von benutzerdefinierten Daten wie Bildern oder Tondaten in ein XML-Dokument verwendet.


0
2018-05-06 20:26