LINQ to XMLは初めてです。 XDocument
をビルドした後、OuterXml
で行ったようにXmlDocument
を取得するにはどうすればよいですか?
オブジェクトのオーバーライドされたToString()メソッドのみを使用する必要があります。
XDocument xmlDoc ...
string xml = xmlDoc.ToString();
これは、XElementなどのすべてのXObjectで機能します。
これがいつ変わったかはわかりませんが、今日(2017年7月)答えを試してみると、
「System.Xml.XmlDocument」
ToString()
の代わりに、元々意図されていたXmlDocument
コンテンツにアクセスする方法を使用できます:xmlドキュメントをストリームに書き込む。
XmlDocument xml = ...;
string result;
using (StringWriter writer = new StringWriter())
{
xml.Save(writer);
result = writer.ToString();
}
ToString()を使用して、XDocumentを文字列に変換します。
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();
XDocument.ToString()を実行しても、完全なXMLを取得できない場合があります。
XMLドキュメントの先頭のXML宣言を文字列として取得するには、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());