gpt4 book ai didi

c# - 如何在 C# 中构建 XML?

转载 作者:IT王子 更新时间:2023-10-29 03:27:36 25 4
gpt4 key购买 nike

如何在 C# 中生成有效的 XML?

最佳答案

这取决于场景。 XmlSerializer 当然是一种方式,并且具有直接映射到对象模型的优势。在.NET 3.5中,XDocument等也很友好。如果大小非常大,那么 XmlWriter 就是您的 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 等)会很快占用大量内存。因此,如果您要从 CSV 编写一个 100 MB 的 XML 文件,您可能会考虑 XmlWriter;这是更原始的(一次写入的流水线),但非常有效(想象这里有一个大循环):

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 的另一个问题是它不喜欢序列化不可变类型:所有东西都必须有一个公共(public)的 getter setter(除非你自己通过实现 IXmlSerializable,在这种情况下,使用 XmlSerializer 不会有太多好处。

关于c# - 如何在 C# 中构建 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/284324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com