Voici comment je suis en train de convertir XMLDocument à String
StringWriter stringWriter = new StringWriter();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter);
xmlDoc.WriteTo(xmlTextWriter);
return stringWriter.ToString();
Le problème avec cette méthode est que si j'ai " ((guillemets) que j'ai dans les attributs), il leur échappe.
Par exemple:
<Campaign name="ABC">
</Campaign>
Ci-dessus, le XML attendu. Mais ça revient
<Campaign name=\"ABC\">
</Campaign>
Je peux faire String.Replace "\" mais cette méthode est-elle correcte? Est-ce qu'il y a des effets secondaires? Cela fonctionnera-t-il correctement si le code XML contient lui-même un "\"
Il n'y a pas de citations. C'est juste le débogueur VS. Essayez d’imprimer sur la console ou de sauvegarder dans un fichier et vous verrez. En remarque: toujours disposer des objets jetables:
using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
xmlDoc.WriteTo(xmlTextWriter);
xmlTextWriter.Flush();
return stringWriter.GetStringBuilder().ToString();
}
En supposant que xmlDoc soit un objet XmlDocument, quel est le problème avec xmlDoc.OuterXml?
return xmlDoc.OuterXml;
La propriété OuterXml renvoie une version chaîne du code XML.
Si vous utilisez Windows.Data.Xml.Dom.XmlDocument
version de XmlDocument
(utilisée dans les applications UWP par exemple), vous pouvez utiliser yourXmlDocument.GetXml()
pour obtenir le code XML sous forme de chaîne.
En tant que méthode d'extension:
public static class Extensions
{
public static string AsString(this XmlDocument xmlDoc)
{
using (StringWriter sw = new StringWriter())
{
using (XmlTextWriter tx = new XmlTextWriter(sw))
{
xmlDoc.WriteTo(tx);
string strXmlText = sw.ToString();
return strXmlText;
}
}
}
}
Maintenant, pour utiliser simplement:
yourXmlDoc.AsString()
"
est affiché sous la forme \"
dans le débogueur, mais les données sont correctes dans la chaîne et vous n'avez rien à remplacer. Essayez de vider votre chaîne dans un fichier et vous remarquerez que la chaîne est correcte.