C# で XML を構築するにはどうすればいいですか? 質問する

C# で XML を構築するにはどうすればいいですか? 質問する

C# で有効な XML を生成するにはどうすればよいですか?

ベストアンサー1

シナリオによって異なります。XmlSerializerは確かに 1 つの方法であり、オブジェクト モデルに直接マッピングできるという利点があります。 .NET 3.5 では、XDocumentなども非常に使いやすいです。 サイズが非常に大きい場合は、XmlWriterが便利です。

XDocument:

Console.WriteLine(
    new XElement("Foo",
        new XAttribute("Bar", "some & value"),
        new XElement("Nested", "data")));

または以下も同様ですXmlDocument:

XmlDocument doc = new XmlDocument();
XmlElement el = (XmlElement)doc.AppendChild(doc.CreateElement("Foo"));
el.SetAttribute("Bar", "some & value");
el.AppendChild(doc.CreateElement("Nested")).InnerText = "data";
Console.WriteLine(doc.OuterXml);

大量のデータストリームを書き込む場合、DOMアプローチ(XmlDocument/XDocumentなど)はどれもすぐに大量のメモリを消費します。したがって、100MBのXMLファイルをCSVファイルを検討するかもしれませんXmlWriter。これはより原始的ですが (一度だけ書き込み可能な firehose)、非常に効率的です (ここで大きなループを想像してください)。

XmlWriter writer = XmlWriter.Create(Console.Out);
writer.WriteStartElement("Foo");
writer.WriteAttributeString("Bar", "Some & value");
writer.WriteElementString("Nested", "data");
writer.WriteEndElement();

最後に、経由XmlSerializer

[Serializable]
public class Foo
{
    [XmlAttribute]
    public string Bar { get; set; }
    public string Nested { get; set; }
}
...
Foo foo = new Foo
{
    Bar = "some & value",
    Nested = "data"
};
new XmlSerializer(typeof(Foo)).Serialize(Console.Out, foo);

これは、クラスなどにマッピングするための優れたモデルですが、単純なことを行う場合 (または目的の XML がオブジェクト モデルと直接相関していない場合) には、やり過ぎかもしれません。 のもう 1 つの問題は、XmlSerializer不変型をシリアル化できないことです。すべてにパブリックなゲッターセッターが必要です ( を実装して自分ですべてを行う場合を除きますIXmlSerializable。その場合、 を使用することで得られるメリットはあまりありませんXmlSerializer)。

おすすめ記事