Je me demandais s'il existait un moyen d'échapper à un élément de fin de CDATA ( ]]>
) dans une section CDATA d'un document XML. Ou, plus généralement, s'il existe une séquence d'échappement à utiliser à l'intérieur d'une section CDATA (mais si elle existe, je suppose que cela n'aurait probablement de sens que d'échapper les tokens de début ou de fin, de toute façon).
En fait, il est possible d'avoir un jeton de début ou de fin intégré dans un CDATA et de demander à l'analyseur de ne pas l'interpréter, mais de le traiter comme une simple séquence de caractères.
Probablement, vous devriez simplement refactoriser votre structure xml ou votre code si vous vous retrouvez à essayer de faire cela, mais même si je travaille avec xml sur une base quotidienne depuis environ 3 ans et que je n'ai jamais eu ce problème, je me demandais si c'était possible. Juste par curiosité.
Edita:
A part l'utilisation de l'encodage html...
4 votes
Tout d'abord, je considère que la réponse est correcte, mais je note que rien n'empêche quelqu'un d'encoder
>
comme>
au sein de CData afin d'assurer l'intégration des]]>
ne sera pas analysé comme un CDEnd. Cela signifie simplement que c'est inattendu et que&
doit PREMIÈREMENT être encodée comme&
afin que les données puissent être correctement décodées. Les utilisateurs du document doivent également savoir décoder ces données. Ce n'est pas inhabituel, car les CData ont notamment pour but de contenir un contenu qu'un consommateur spécifique sait comment traiter. On ne peut pas s'attendre à ce qu'un tel CData soit interprété correctement par un consommateur générique.1 votes
@nix, CDATA fournit simplement un moyen explicite de déclarer le contenu d'un nœud de texte de manière à ce que les jetons de langue à l'intérieur (autres que ]]>) ne soient pas analysés. Il ne développe pas les références d'entités comme > pour cette raison, donc dans un bloc CDATA, cela signifie simplement ces quatre caractères, pas '>'. Pour mettre les choses en perspective : dans la spécification XML, tout le contenu textuel est appelé "cdata", et pas seulement ces séquences ("données de caractères"). Il ne s'agit pas non plus d'agents de consommation spécifiques. (Une telle chose existe cependant : les instructions de traitement (<?instruction cible?>).
0 votes
(Je dois ajouter que même si ce genre de choses va à l'encontre de l'intention originale du nœud, tout est juste dans la longue et tortueuse bataille avec XML. Je pense simplement qu'il pourrait être utile pour les lecteurs de savoir que < ![CDATA[]]> n'a pas été conçu dans ce but).
1 votes
@Semicolon
CDATA
a été conçu pour permettre aux n'importe quoi : ils sont utilisés pour échapper à des blocs de texte contenant des caractères qui seraient autrement reconnus comme des balises Cela impliqueCDATA
puisqu'il s'agit également d'un balisage. Mais, en fait, vous n'avez pas besoin du double encodage que j'ai suggéré.]]>
est un moyen acceptable d'encoder unCDEnd
à l'intérieur d'unCDATA
.0 votes
Il est vrai que vous n'auriez pas besoin d'un double encodage, mais vous auriez quand même besoin que l'agent ait des connaissances spéciales, puisque l'analyseur ne traiterait pas > comme >. C'est ce que vous voulez dire, je pense ? Que vous pourriez les remplacer comme bon vous semble, après l'analyse ?