Question Que signifie en XML?


Je trouve souvent cela étrange CDATA faire XML des dossiers:

<![CDATA[some stuff]]>

J'ai observé que CDATA tag vient toujours au début, puis suivi de quelques trucs.

Mais parfois, il est utilisé, parfois non. Je suppose que c'est pour marquer some stuff est la "donnée" qui sera insérée après cela. Mais quel genre de données est some stuff? Est-ce que tout ce que j'écris dans les balises XML n'est pas une sorte de données?


803
2018-05-06 20:20


origine


Réponses:


CDATA signifie Données de personnage et cela signifie que les données entre ces chaînes comprennent des données pourrait être interprété comme un balisage XML, mais ne devrait pas l'être.

Les principales différences entre CDATA et les commentaires sont:

Cela signifie que ces trois extraits de XML proviennent d'un document bien formé:

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



Une section CDATA est "une section du contenu de l'élément qui est marquée pour que l'analyseur interprète comme des données de caractères uniquement, pas de balisage."

Syntactiquement, il se comporte de la même manière qu'un commentaire:

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

... mais cela fait toujours partie du document:

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

Essayez d'enregistrer les éléments suivants en tant que .xhtml fichier (ne pas  .html) et ouvrez-le en utilisant FireFox (pas Internet Explorer) pour voir la différence entre le commentaire et la section CDATA; le commentaire n'apparaîtra pas lorsque vous regarderez le document dans un navigateur, alors que la section CDATA:

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

Quelque chose à noter avec les sections CDATA est qu'ils n'ont pas d'encodage, donc il n'y a aucun moyen d'inclure la chaîne ]]> en eux. Toute donnée de caractère qui contient ]]> devra - pour autant que je sache - être un nœud de texte à la place. De même, d'une perspective de manipulation DOM, vous ne pouvez pas créer une section CDATA qui comprend ]]>:

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

Ce code de manipulation DOM lancera une exception (dans Firefox) ou aboutira à un document XML mal structuré: http://jsfiddle.net/9NNHA/


307
2018-05-06 20:35



Un gros cas d'utilisation: votre fichier xml inclut un programme, sous forme de données (par exemple, un didacticiel de page Web pour Java). Dans cette situation, vos données incluent un gros morceau de caractères qui incluent '&' et '<' mais ces caractères ne sont pas destinés à être xml.

Comparer:

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

avec

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

Surtout si vous copiez / collez ce code à partir d'un fichier (ou si vous l'incluez, dans un pré-processeur), il est agréable d'avoir les caractères que vous voulez dans votre fichier xml, sans les confondre avec les balises / attributs XML. Comme mentionné @paary, d'autres utilisations courantes incluent lorsque vous incorporez des URL qui contiennent des esperluettes. Enfin, même si les données ne contiennent que quelques caractères spéciaux mais que les données sont très très longues (le texte d'un chapitre, par exemple), il est préférable de ne pas coder ces quelques entités lorsque vous modifiez votre fichier xml .

(Je soupçonne que toutes les comparaisons aux commentaires sont un peu trompeuses / inutiles.)


56
2018-05-28 13:26



Une fois, j'ai dû utiliser CDATA lorsque ma balise xml avait besoin de stocker du code HTML. Quelque chose comme

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

CDATA signifie donc qu'il ignorera tout caractère qui pourrait autrement être interprété comme une balise XML comme <et> etc.


33
2018-05-14 04:28



Les données qui y sont contenues ne seront pas analysées comme XML, et en tant que telles, n'ont pas besoin d'être XML valide ou peuvent contenir des éléments qui peuvent sembler être XML mais ne le sont pas.


26
2018-05-06 20:23



De Wikipedia:

[Dans] un document XML ou une entité analysée externe, une section CDATA est un   section du contenu de l'élément qui est marqué pour l'analyseur d'interpréter   comme seules données de caractères, pas de balisage.

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

Ainsi: le texte à l'intérieur de CDATA est vu par l'analyseur mais seulement en tant que caractères non en tant que nœuds XML.


10
2018-01-15 14:49



CDATA est synonyme de données de caractères. Vous pouvez l'utiliser pour échapper certains caractères qui seront traités comme du XML normal. Les données à l'intérieur ne seront pas analysées. Par exemple, si vous souhaitez transmettre une URL contenant & dedans, vous pouvez utiliser CDATA pour le faire. Sinon, vous obtiendrez une erreur car elle sera analysée en tant que XML normal.


7
2018-05-10 04:52



Comme un autre exemple de son utilisation ...

Si vous avez un flux RSS (document XML) et que vous souhaitez inclure un encodage HTML de base dans l'affichage de la description, vous pouvez utiliser CData pour l'encoder:

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

Le lecteur RSS extrait la description et restitue le code HTML dans le CDATA.

Note - tous les tags HTML ne fonctionnent pas - Je pense que cela dépend du lecteur RSS que vous utilisez.


Et pour expliquer pourquoi cet exemple utilise CData (et pas les balises pubData et dc: creator appropriées) ... c'est pour l'affichage du site web en utilisant un widget RSS pour lequel nous n'avons aucun contrôle de formatage réel.

Cela nous permet de spécifier la hauteur et la position de l'image incluse, de formater les noms d'auteur et la date correctement, et ainsi de suite, sans avoir besoin d'un nouveau widget. Cela signifie aussi que je peux écrire ceci et ne pas avoir à les ajouter à la main.


6
2017-09-23 15:44



Il est utilisé pour contenir des données qui pourraient autrement être vues comme xml car elles contiennent certains caractères.

De cette façon, les données à l'intérieur seront affichées, mais pas interprétées.


3
2018-05-06 20:23



Habituellement utilisé pour intégrer des données personnalisées, comme des images ou des données sonores dans un document XML.


0
2018-05-06 20:26