宣言を明示的に書き出すか、a StringWriter
を使用して呼び出しますSave()
。
using System;
using System.IO;
using System.Text;
using System.Xml.Linq;
class Test
{
static void Main()
{
string xml = @"<?xml version='1.0' encoding='utf-8'?>
<Cooperations>
<Cooperation />
</Cooperations>";
XDocument doc = XDocument.Parse(xml);
StringBuilder builder = new StringBuilder();
using (TextWriter writer = new StringWriter(builder))
{
doc.Save(writer);
}
Console.WriteLine(builder);
}
}
これを拡張メソッドとして簡単に追加できます。
public static string ToStringWithDeclaration(this XDocument doc)
{
if (doc == null)
{
throw new ArgumentNullException("doc");
}
StringBuilder builder = new StringBuilder();
using (TextWriter writer = new StringWriter(builder))
{
doc.Save(writer);
}
return builder.ToString();
}
これには、宣言がない場合に強打されないという利点があります:)
それからあなたは使うことができます:
string x = doc.ToStringWithDeclaration();
これはエンコーディングとしてutf-16を使用することに注意してくださいStringWriter
。これはでの暗黙的なエンコーディングだからです。StringWriter
たとえば、常にUTF-8を使用するように、のサブクラスを作成することで、自分自身に影響を与えることができます。