web-dev-qa-db-fra.com

Convertir XmlDocument en chaîne

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 "\"

201
akif

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();
}
168
Darin Dimitrov

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.

617
Chris Moutray

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.

9
Whyser

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()
5
SixOThree

" 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.

2
Arsen Mkrtchyan