Wie bekomme ich XML als Zeichenfolge von XDocument?


73

Ich bin neu in LINQ to XML. XDocumentWie bekommen Sie das , nachdem Sie gebaut haben , OuterXmlso wie Sie es gemacht haben XmlDocument?

Antworten:


98

Sie müssen nur die überschriebene ToString () -Methode des Objekts verwenden:

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

Dies funktioniert mit allen XObjects wie XElement usw.


23
Wofür um alles in der Welt ist diese Methode? o.0
Andrzej Gis

1
Es ist nur eine einfache Demonstration, einen einfachen Link zur XmlDocument.OuterXml-Eigenschaft zu haben.

4
Dies kehrt jetzt zurückSystem.Xml.XmlDocument
The Muffin Man

4
@ TheMuffinMan Dann machst du es falsch, da diese Antwort über XDocument ist, nicht XmlDocument (Linq)
Mathijs Segers

Wenn eines Ihrer XML- &Zeichen oder andere Sonderzeichen enthält, funktioniert dies nicht
Alex Gordon

10

Ich weiß nicht, wann sich das geändert hat, aber heute (Juli 2017) habe ich beim Ausprobieren die Antworten bekommen

"System.Xml.XmlDocument"

Stattdessen ToString()können Sie die ursprünglich vorgesehene Art des Zugriffs auf den XmlDocumentInhalt verwenden: Schreiben des XML-Dokuments in einen Stream.

XmlDocument xml = ...;
string result;

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

6
Natürlich ist es verwirrend, aber wenn Sie mit Linq arbeiten, sollten Sie XDocument verwenden, nicht XmlDocument. Dann sollte es funktionieren :-).
Mathijs Segers

4

Wenn Sie XDocument.ToString () ausführen, erhalten Sie möglicherweise nicht das vollständige XML.

Verwenden Sie die Methode XDocument.Save (), um die XML-Deklaration am Anfang des XML-Dokuments als Zeichenfolge abzurufen:

    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());

Diese Komplexität wird kaum benötigt und immer wieder kopiert. Verwenden Sie einfach ein StringWriter()zu Save()direkt.
Gábor

2

Verwenden Sie ToString (), um XDocument in eine Zeichenfolge zu konvertieren:

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();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.