web-dev-qa-db-fra.com

Comment obtenir Xml en tant que chaîne à partir de XDocument?

Je suis nouveau sur LINQ to XML. Après avoir construit XDocument, comment en obtenir le OuterXml comme vous l'avez fait avec XmlDocument?

63
Ashish Gupta

Il vous suffit d'utiliser la méthode ToString () substituée de l'objet:

XDocument xmlDoc ...
string xml = xmlDoc.ToString();

Cela fonctionne avec tous les XObjects, comme XElement, etc.

86
user432219

Je ne sais pas quand cela a changé, mais aujourd'hui (juillet 2017) en essayant les réponses, j'ai

"System.Xml.XmlDocument"

Au lieu de ToString(), vous pouvez utiliser la façon initialement prévue d'accéder au contenu XmlDocument: écrire le doc xml dans un flux.

XmlDocument xml = ...;
string result;

using (StringWriter writer = new StringWriter())
{
  xml.Save(writer);
  result = writer.ToString();
}
9
Mafii

Utilisez ToString () pour convertir XDocument en chaîne:

string result = string.Empty;
XElement root = new XElement("xml",
    new XElement("MsgType", "<![CDATA[" + "text" + "]]>"),
    new XElement("Content", "<![CDATA[" + "Hi, this is Wilson Wu Testing for you! You can ask any question but no answer can be replied...." + "]]>"),
    new XElement("FuncFlag", 0)
);
result = root.ToString();
3
Wilson Wu

Faire XDocument.ToString () peut ne pas obtenir le XML complet.

Afin d'obtenir la déclaration XML au début du document XML sous forme de chaîne, utilisez la méthode XDocument.Save ():

    var ms = new MemoryStream();
    using (var xw = XmlWriter.Create(new StreamWriter(ms, Encoding.GetEncoding("ISO-8859-1"))))
        new XDocument(new XElement("Root", new XElement("Leaf", "data"))).Save(xw);
    var myXml = Encoding.GetEncoding("ISO-8859-1").GetString(ms.ToArray());
0
Wolfgang Grinfeld