61 votes

Comment enregistrer les nouvelles lignes dans l'attribut XML?

Je dois enregistrer le contenu contenant des nouvelles lignes dans certains attributs XML, pas du texte. La méthode doit être choisie pour pouvoir la décoder avec XSLT 1.0 / ESXLT / XSLT 2.0

Quelle est la meilleure méthode d'encodage?

S'il vous plaît suggérer / donner quelques idées.

75voto

Tomalak Points 150423

Conforme aux normes API DOM, il n'y a rien d'autre à faire. Il vous suffit d'enregistrer réelle de caractères de saut de ligne à l'attribut, l'API va les encoder correctement sur son propre (voir XML Canonique spec, section 5.2).

Si vous faites votre propre codage (c'est à dire en remplaçant \n avec 
 avant d'enregistrer la valeur de l'attribut), l'API encoder votre entrée de nouveau, résultant en 
 dans le fichier XML.

Ligne du bas est, la chaîne de valeur est enregistrée dans le texte. Vous obtenez ce que vous mettez dans, pas besoin d'intervenir.

Cependant... certaines implémentations ne sont pas conformes. Par exemple, ils codent & caractères valeurs de l'attribut, mais oubliez les caractères de saut de ligne ou des tabulations. Cela vous met dans une position perdante puisque vous ne pouvez pas simplement remplacer les retours à la ligne avec 
 à l'avance.

Ces implémentations d'enregistrer les caractères de saut de ligne clair, comme ceci:

<xml attribute="line 1
line 2" />

Lors de l'analyse d'un tel document, littérale des retours à la ligne dans les attributs sont normalisés dans un seul espace (de nouveau, conformément à la spécification) - et ainsi, ils sont perdus.

D'enregistrement (et à retenir!) les retours à la ligne dans les attributs est impossible dans ces implémentations.

46voto

Asaph Points 56989

Vous pouvez utiliser l'entité &#10; pour représenter une nouvelle ligne dans un attribut XML. &#13; peut être utilisé pour représenter un retour chariot. Un CRLF de style Windows pourrait être représenté sous la forme &#13;&#10; .

Ceci est la syntaxe XML légale. Voir la spécification XML pour plus de détails.

0voto

rosca dragos Points 11

Une réponse brute peut être:

 XmlDocument xDoc = new XmlDocument();
xDoc.Load(@"Agenda.xml");
//make stuff with the xml
//make attributes value = "\r\n" (you need both expressions to make a new line)
string a = xDoc.InnerXml.Replace("&#xD;", "\r").Replace("&#xA;", "\n").Replace("><",">\r    \n<");
StreamWriter sDoc = new StreamWriter(@"Agenda.xml");
sDoc.Write(a);
sDoc.Flush();
sDoc.Dispose();
 

Comme vous le voyez, ce sera juste une chaîne

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X