Viết khai báo một cách rõ ràng hoặc sử dụng StringWriter
và gọi 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);
}
}
Bạn có thể dễ dàng thêm nó làm phương thức mở rộng:
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();
}
Điều này có ưu điểm là nó sẽ không đi nổ nếu có không phải là một tuyên bố :)
Sau đó, bạn có thể sử dụng:
string x = doc.ToStringWithDeclaration();
Lưu ý rằng điều đó sẽ sử dụng utf-16 làm mã hóa, vì đó là mã hóa ngầm trong StringWriter
. Mặc dù vậy, bạn có thể tác động đến điều đó bằng cách tạo một lớp con StringWriter
, ví dụ: luôn sử dụng UTF-8 .