EDIT : Vous dites "Je concatène un fichier XML simple et court et je n'utilise pas la sérialisation, donc je dois explicitement échapper les caractères XML à la main".
Je voudrais fortement vous conseille de ne pas le faire à la main. Utilisez les API XML pour faire tout cela à votre place - lisez les fichiers d'origine, fusionnez les deux en un seul document de la manière dont vous le souhaitez (vous voudrez probablement utiliser le module XmlDocument.ImportNode
), puis l'écrire à nouveau. Vous ne voulez pas écrire vos propres analyseurs/formateurs XML. La sérialisation est quelque peu hors de propos ici.
Si vous pouvez nous donner un exemple court mais complet de ce que vous essayez de faire exactement, nous pourrons probablement vous aider à ne pas avoir à vous soucier de vous échapper en premier lieu.
Réponse originale
Ce que vous voulez dire n'est pas tout à fait clair, mais normalement les API XML font cela pour vous. Vous définissez le texte dans un nœud, et il échappe automatiquement tout ce qui est nécessaire. Par exemple :
Exemple de LINQ to XML :
using System;
using System.Xml.Linq;
class Test
{
static void Main()
{
XElement element = new XElement("tag",
"Brackets & stuff <>");
Console.WriteLine(element);
}
}
Exemple de DOM :
using System;
using System.Xml;
class Test
{
static void Main()
{
XmlDocument doc = new XmlDocument();
XmlElement element = doc.CreateElement("tag");
element.InnerText = "Brackets & stuff <>";
Console.WriteLine(element.OuterXml);
}
}
Sortie des deux exemples :
<tag>Brackets & stuff <></tag>
Cela suppose que vous souhaitiez l'échappement XML, bien sûr. Si ce n'est pas le cas, veuillez fournir plus de détails.
0 votes
Pas d'une seule façon, mais en voici quelques-unes : http://weblogs.sqlteam.com/mladenp/archive/2008/10/21/Different-ways-how-to-escape-an-XML-string-in-C.aspx
15 votes
Le plus court auquel je puisse penser :
new XText(unescaped).ToString()
3 votes
Pour toute personne tombant sur ce problème, j'ai trouvé que c'était la meilleure réponse : stackoverflow.com/a/5304827/1224069