XDocumentは、1行目の宣言(バージョン、エンコード)を含むすべてのノードを取得する
3422 ワード
XDocumentをxmlファイルとして保存する方法は以下の通りです.
person.xmlが開くと、最初の行のバージョンと符号化宣言があります.
張三 18 ToString(); このときxmlの値は以下のようになり、xmlの最初の行の宣言を取得できません:張三 18 解決方法はいくつかあります.1つ目は、比較的簡単です.
2つ目は、拡張方法を書くことです
呼び出し:
3つ目は、同じように拡張方法を書いてカプセル化します
この方法では、生成された符号化宣言がencoding="utf-16"となり、encoding="utf-8"に変換するには、クラスUtf 8 StringWriterがStringWriterを継承し、リロード属性EncodingをUTF 8に設定することができ、完全なコードは以下の通りである.
コメント:
XDocument.ToStringメソッドには2つのリロードリストがあり、XMLノードをインデントするかどうかを設定できます.
名前説明ToString()は、このノードのインデントXMLを返します.ToString(SaveOptions)は、このノードのXMLを返し、フォーマットの無効化を選択することもできます.SaveOptionsには2つの列挙値があります.DisableFormattingはNoneインデントをインデントしません.
XDocument.セーブメソッドにもパラメータSaveOptionsが設定できます.
参考記事:http://msdn.microsoft.com/zh-cn/library/vstudio/bb538297%28v=vs.90%29.aspx http://stackoverflow.com/questions/1228976/xdocument-tostring-drops-xml-encoding-tag http://stackoverflow.com/questions/5248400/why-does-the-xdocument-give-me-a-utf16-declaration
XDocument doc = new XDocument(
new XDeclaration("1.0","UTF-8",null),
new XElement("Persons",
new XElement("Person",
new XAttribute("id","1"),
new XElement("Name"," "),
new XElement("Age",18)
)
)
);
doc.Save("person.xml");
person.xmlが開くと、最初の行のバージョンと符号化宣言があります.
string xml = doc.Declaration.ToString() + doc.ToString();
2つ目は、拡張方法を書くことです
public static string ToStringWithDeclaration(this XDocument doc, SaveOptions options = SaveOptions.DisableFormatting)
{
return doc.Declaration.ToString() + doc.ToString(options);
}
呼び出し:
string xml = doc.ToStringWithDeclaration();
3つ目は、同じように拡張方法を書いてカプセル化します
public static string ToStringWithDeclaration(this XDocument doc)
{
StringBuilder sb = new StringBuilder();
using (TextWriter tw = new StringWriter(sb))
{
doc.Save(tw, SaveOptions.DisableFormatting);
}
return sb.ToString();
}
この方法では、生成された符号化宣言がencoding="utf-16"となり、encoding="utf-8"に変換するには、クラスUtf 8 StringWriterがStringWriterを継承し、リロード属性EncodingをUTF 8に設定することができ、完全なコードは以下の通りである.
public class Utf8StringWriter : StringWriter
{
public Utf8StringWriter(StringBuilder sb) : base(sb){ }
public override Encoding Encoding { get { return Encoding.UTF8; } }
}
public static string ToStringWithDeclaration(this XDocument xdoc)
{
StringBuilder sb = new StringBuilder();
using (TextWriter tw = new Utf8StringWriter(sb))
{
xdoc.Save(tw, SaveOptions.DisableFormatting);
}
return sb.ToString();
}
コメント:
XDocument.ToStringメソッドには2つのリロードリストがあり、XMLノードをインデントするかどうかを設定できます.
名前説明ToString()は、このノードのインデントXMLを返します.ToString(SaveOptions)は、このノードのXMLを返し、フォーマットの無効化を選択することもできます.SaveOptionsには2つの列挙値があります.DisableFormattingはNoneインデントをインデントしません.
XDocument.セーブメソッドにもパラメータSaveOptionsが設定できます.
参考記事:http://msdn.microsoft.com/zh-cn/library/vstudio/bb538297%28v=vs.90%29.aspx http://stackoverflow.com/questions/1228976/xdocument-tostring-drops-xml-encoding-tag http://stackoverflow.com/questions/5248400/why-does-the-xdocument-give-me-a-utf16-declaration