Échapper les caractères de nouvelle ligne avec XmlDocument
Mon application génère le XML à l'aide de XmlDocument. Certaines données contient un saut de ligne et retour chariot caractères.
Lorsque le texte est attribué à un XmlElement comme ceci:
e.InnerText = "Hello\nThere";
Le XML résultant ressemble à ceci:
<e>Hello
There</e>
Le récepteur de l'XML (dont je n'ai pas le contrôle) traite de la nouvelle ligne comme un espace blanc et voit le texte ci-dessus:
"Hello There"
Pour le récepteur de conserver la nouvelle ligne, il nécessite le codage:
<e>Hello
There</e>
Si les données sont appliquées à un XmlAttribute, la nouvelle ligne est codé correctement.
J'ai essayé d'appliquer du texte à XmlElement à l'aide d'InnerText et InnerXml mais le résultat est le même pour les deux.
Est-il un moyen d'obtenir XmlElement les nœuds de texte pour la sortie de nouvelles lignes et de transport, est de retour dans leurs codées formes?
Voici un exemple de code pour illustrer le problème:
string s = "return[\r] newline[\n] special[&<>\"']";
XmlDocument d = new XmlDocument();
d.AppendChild( d.CreateXmlDeclaration( "1.0", null, null ) );
XmlElement r = d.CreateElement( "root" );
d.AppendChild( r );
XmlElement e = d.CreateElement( "normal" );
r.AppendChild( e );
XmlAttribute a = d.CreateAttribute( "attribute" );
e.Attributes.Append( a );
a.Value = s;
e.InnerText = s;
s = s
.Replace( "&" , "&" )
.Replace( "<" , "<" )
.Replace( ">" , ">" )
.Replace( "\"", """ )
.Replace( "'" , "'" )
.Replace( "\r", "
" )
.Replace( "\n", "
" )
;
e = d.CreateElement( "encoded" );
r.AppendChild( e );
a = d.CreateAttribute( "attribute" );
e.Attributes.Append( a );
a.InnerXml = s;
e.InnerXml = s;
d.Save( @"C:\Temp\XmlNewLineHandling.xml" );
La sortie de ce programme est:
<?xml version="1.0"?>
<root>
<normal attribute="return[
] newline[
] special[&<>"']">return[
] newline[
] special[&<>"']</normal>
<encoded attribute="return[
] newline[
] special[&<>"']">return[
] newline[
] special[&<>"']</encoded>
</root>
Merci à l'avance.
Chris.
Regardez le top 4 lignes de code: ce que j'avais au début, ce que je suis, ce que le récepteur voit, ce que je veux. Les attributs de coder des retours à la ligne comme je le veux, les Éléments ne sont pas.
OriginalL'auteur Chris C. | 2011-03-01
Vous devez vous connecter pour publier un commentaire.
Comment sur l'utilisation de
HttpUtility.HtmlEncode()
?http://msdn.microsoft.com/en-us/library/73z22y6h.aspx
OK, désolé pour le mauvais y mènent.
HttpUtility.HtmlEncode()
sera pas gérer le retour à la ligne problème auquel vous êtes confronté.Ce lien de blog va vous aider, mais
http://weblogs.asp.net/mschwarz/archive/2004/02/16/73675.aspx
Fondamentalement, la nouvelle ligne de la manipulation est contrôlée par le
xml:space="preserve"
attribut.Exemple de code de travail:
La sortie lire:
OriginalL'auteur code4life
Encodage est probablement votre meilleur pari à l'aide de la les méthodes décrites ici. Ou vous pourriez peut-être regarder à l'aide d'un Section CData pour votre contenu.
OriginalL'auteur Reddog
.net 2.0 utilisation XmlDocument PreserveWhitespace commutateur
OriginalL'auteur TFD
j'ai eu le même problème
Préserver les retours chariot lorsque je écrire/lire à partir du fichier xml à l'aide de asp.net
la solution est de remplacer les espaces xml vers html un espace après le code html généré
j'ajoute cette
à la fin de la méthode avant de fermer le lecteur de flux
OriginalL'auteur fatma