Caractères spéciaux dans les fichiers XML de traitement avec l'API DOM
J'ai un fichier au format XML (il s'agit juste de racine de début et de fin des balises, et les enfants de la racine). Les éléments de texte des enfants contiennent l'esperluette &. En XML, il n'est pas permis d'avoir ce symbole afin que le document soit valide, et quand j'ai essayé de traiter le fichier à l'aide de l'API DOM en Java et d'un analyseur XML, j'ai obtenu l'analyse des erreurs. Donc, j'ai remplacé l' & avec &
, et j'ai traité le dossier avec succès: j'ai dû extraire les valeurs des éléments de texte dans les différents fichiers de texte brut.
Quand j'ai ouvert ces nouveaux fichiers texte, je m'attendais à voir &
, mais il y a & à la place. Pourquoi est-ce? J'ai stocké le texte dans des fichiers texte sans extension (mon fichier d'origine avec le format XML n'avait pas non plus .extension xml), et j'ai juste & dans le texte du nouveau fichier, n'importe comment, j'ouvre le fichier: txt ou en tant que fichier xml (certaines de ces options dans mon éditeur XML). Ce qui se passe exactement? Java (?) convertir &
& automatiquement? Ou il y a quelques encodage par défaut? Eh bien, &
signifie &, et je suppose qu'il y est une certaine "invisible" conversion automatique, mais je suis confus quand et comment cela se passe. Voici des exemples de mon fichier original et le fichier extrait que je reçois après j'ai traité le fichier d'origine avec Java:
C'est mon "négatif.revue" fichier au format XML:
<review>
<review_text>
I will not wear it as it is too big & looks funny on me.
</review_text>
</review>
C'est mon fichier extrait "negative_1":
I will not wear it as it is too big & looks funny on me.
Pour moi, il est important d'avoir les données d'origine tel qu'il est, sans faire aucune conversion ou de remplacement), donc j'ai pensé que j'ai à traiter le fichier extrait "negative_1" convertir en &
&. Comme vous le voyez, il semble que je n'ai pas à le faire. Mais je ne comprends pas pourquoi :(.
Vous en remercie d'avance!
- Juste une remarque: "se compose seulement de la racine de début et de fin des balises, et les enfants de la racine". C'est la définition même de l'XML (il y a un seul élément racine).
- stackoverflow.com/questions/4341145/...
Vous devez vous connecter pour publier un commentaire.
La raison en est simple: Le fichier XML contient réellement un
"&"
caractère.Il est simplement représenté différemment (c'est à dire qu'il est "échappé"), parce qu'une véritable
"&"
sur son propre sauts de fichiers XML, comme vous l'avez vu. Lire la section correspondante dans le fichier XML 1.0 spec: "2.4 Données de Caractère et de Balisage". C'est juste quelques lignes, mais il explique le problème assez bien.XML est une représentation de données (!). Ne pas penser que c'est un fichier texte. Exemple:
Vous souhaitez stocker la chaîne de caractères "17 < 20" dans un fichier XML. D'abord, vous ne pouvez pas, depuis le "<" est réservé à la balise d'ouverture du support. Donc, ce serait invalide:
Solution: employer des caractères s'échapper sur la spéciale/caractère réservé, juste pour les moyens de conserver la validité du fichier:
À toutes fins pratiques l'extrait ci-dessus contient les données suivantes (en représentation JSON de l'époque):
C'est pourquoi vous voyez la vraie
"&"
dans votre post-traitement. Il a été échappé, de la même façon, mais c'est sens resté le même tout le temps.L'exemple ci-dessus qui explique aussi pourquoi le
"&"
doivent être traités de manière particulière: Il est lui-même partie de l'XML échapper mécanisme. Il marque le début d'une séquence d'échappement, comme dans"<"
. Par conséquent, il doit être échappé lui-même (avec"&"
, comme vous l'avez fait).Tout analyseur XML implicitement traduire des entités telles que
&
,<
,>
, dans les caractères correspondants, dans le cadre du processus de l'analyse du fichier.