Quelle est la bonne façon de coder CR-LF sauts de ligne dans le texte/xml valeurs?
Par opposition à l'application/xml fichiers qui pourraient faire quelque chose, ou normalizedString valeurs qui convertir tous les espaces séquences à un seul caractère espace, je pose la question ici plus spécifiquement dans le contexte de fichiers texte/xml avec les valeurs de chaîne. Par souci de simplicité, disons que je suis le seul à l'aide de caractères ASCII d'un fichier encodé en UTF8.
Donné les deux suivants de la ligne de chaîne de texte que je souhaite représenter en XML:
Hello
World!
Qui est la suivante octets en mémoire:
0000: 48 65 6c 6c 6f 0d 0a 57 6f 72 6c 64 21 Hello..World!
Selon la RFC 2046, tout texte/* type MIME DOIT (devrait) représentent un saut de ligne à l'aide de Retour Chariot suivi par un caractère de Saut de ligne séquence. Dans cette lumière, le fragment XML suivant devrait être à droite:
<tag>Hello
World!</tag>
ou
0000: 3c 74 61 67 3c 48 65 6c 6c 6f 0d 0a 57 6f 72 6c <tag>Hello..Worl
0010: 64 21 3c 2f 74 61 67 3c d!</tag>
Mais je vais régulièrement voir les fichiers comme suit:
<tag><![CDATA[Hello
World!]]></tag>
Ou, encore plus étrange:
<tag>Hello&xD;
World!</tag>
Où l' &0xD; séquence est suivie par un seul caractère de Saut de ligne:
0000: 3c 74 61 67 3c 48 65 6c 6c 6f 26 78 44 3b 0a 57 <tag>Hello&xD;.W
0010: 6f 72 6c 64 21 3c 2f 74 61 67 3c orld!</tag>
Ce qui me manque ici? Quelle est la bonne façon de représenter plusieurs lignes de texte dans une chaîne de caractères XML valeur, de sorte qu'il peut sortir de l'autre bout sans encombre?
OriginalL'auteur AlwaysLearning | 2013-02-22
Vous devez vous connecter pour publier un commentaire.
CR (&x0D;), LF (&) x0A;), CRLF, ou de quelques autres combinaisons sont toutes valides. Comme indiqué dans le spec, tous ces éléments sont convertis en une seule &x0A; le caractère.
Lors de la lecture de la spécification, - je l'interpréter comme ceci: si l'une des premières suivantes code point séquences se trouve dans l'entrée, le remplacer par
0xd 0xa
:0xd 0x85
,0x85
,0x2028
,0xd «anything other than 0xa or 0x85»
. Depuis ce remplacement se passe “avant l'analyse” (voir référence), tout caractère littéral de l'entité (c'est à dire,<tag>
</tag>
) doit être préservé. Donc, pour cet exemple, l'analyse de contenu doit être la séquence d'octets0xd
au lieu de0xa
. Je peux lire les spec correctement? Votre réponse semble suggérer que ce remplacement pourrait arriver après l'analyse au lieu de l'avant...OriginalL'auteur Eric Galluzzo
Après l'écriture de tests NUnit en Mono et JUnit tests en Java, la réponse semble être d'utiliser soit <balise>Bonjour \nWorld!</balise> ou <balise>Bonjour
\nWorld!</balise> comme ci-dessous...
Foo.cs:
XmlStringTests.cs:
Foo.java:
XmlStringTests.java:
J'espère que cela permet de gagner du peuple un certain temps.
OriginalL'auteur AlwaysLearning