我怎样才能建立在C#中的XML? [英] How can I build XML in C#?

查看:85
本文介绍了我怎样才能建立在C#中的XML?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

怎样才能在C#中有效的XML?

How can I generate valid XML in C#?

推荐答案

这取决于具体的方案。 的XmlSerializer 当然是一种方式,并具有映射的优势,直接的对象模型。在.NET 3.5,的XDocument 等也非常友好。如果大小是非常大的,那么的XmlWriter 是你的朋友。

It depends on the scenario. XmlSerializer is certainly one way and has the advantage of mapping directly to an object model. In .NET 3.5, XDocument, etc. are also very friendly. If the size is very large, then XmlWriter is your friend.

对于的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 等),将迅速采取了大量的内存。所以,如果你正在写一个100 NBSP;从 CSV MB的XML文件,你可能会考虑的XmlWriter ;这是比较原始的(一次性写入流水),但非常有效的(想象这里大循环):

If you are writing a large stream of data, then any of the DOM approaches (such as XmlDocument/XDocument, etc.) will quickly take a lot of memory. So if you are writing a 100 MB XML file from CSV, you might consider XmlWriter; this is more primitive (a write-once firehose), but very efficient (imagine a big loop here):

    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并没有真正有一个直接相关的对象模型)。与的XmlSerializer 的另一个问题是它不喜欢一成不变的序列化类型:一切都必须有一个公共的getter的的制定者(除非你做这一切自己通过实施的IXmlSerializable ,在这种情况下,你还没有使用的XmlSerializer )上涨了很多。

This is a nice model for mapping to classes, etc.; however, it might be overkill if you are doing something simple (or if the desired XML doesn't really have a direct correlation to the object model). Another issue with XmlSerializer is that it doesn't like to serialize immutable types : everything must have a public getter and setter (unless you do it all yourself by implementing IXmlSerializable, in which case you haven't gained much by using XmlSerializer).

这篇关于我怎样才能建立在C#中的XML?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆