J'ai une chaîne qui contient des caractères XML non valides. Comment puis-je échapper (ou supprimer) les caractères XML non valides avant d'analyser la chaîne ?
Réponses
Trop de publicités?
BLUEPIXY
Points
18514
Utiliser SecurityElement.Escape
using System;
using System.Security;
class Sample {
static void Main() {
string text = "Escape characters : < > & \" \'";
string xmlText = SecurityElement.Escape(text);
//output:
//Escape characters : < > & " '
Console.WriteLine(xmlText);
}
}
Urs Meili
Points
157
Voici une version optimisée de la méthode ci-dessus RemoveInvalidXmlChars qui ne crée pas un nouveau tableau à chaque appel, stressant ainsi inutilement le GC :
public static string RemoveInvalidXmlChars(string text)
{
if (text == null)
return text;
if (text.Length == 0)
return text;
// a bit complicated, but avoids memory usage if not necessary
StringBuilder result = null;
for (int i = 0; i < text.Length; i++)
{
var ch = text[i];
if (XmlConvert.IsXmlChar(ch))
{
result?.Append(ch);
}
else if (result == null)
{
result = new StringBuilder();
result.Append(text.Substring(0, i));
}
}
if (result == null)
return text; // no invalid xml chars detected - return original text
else
return result.ToString();
}