【问题标题】:What's the difference between XElement.WriteTo(XmlWriter) and XElement.Save(XmlWriter)?XElement.WriteTo(XmlWriter) 和 XElement.Save(XmlWriter) 有什么区别?
【发布时间】:2018-09-28 09:38:04
【问题描述】:

【问题讨论】:

  • WriteTo() 使用旧的 Xml 库,而 Save() 使用 Xml Linq 库。结果应该是一样的。
  • 我认为您可以将答案标记为已接受。

标签: .net xml linq-to-xml


【解决方案1】:

XElement.Save(XmlWriter) 将完整的 xml 文档写入目标 XmlWriter,包括开始和结束文档声明。
要编写XElement 本身的内容,它会调用相同的WriteTo 方法。

来自.NET reference source

public void Save(XmlWriter writer)
{
    if (writer == null)
    {
        throw new ArgumentNullException("writer");
    }
    writer.WriteStartDocument();
    WriteTo(writer);
    writer.WriteEndDocument();
}


XElement.WriteTo(XmlWriter) 只是将给定的XElement 写入目标XmlWriter

来自.NET reference source

public override void WriteTo(XmlWriter writer)
{
    if (writer == null)
    {
        throw new ArgumentNullException("writer");
    }
    new ElementWriter(writer).WriteElement(this);
}

这允许XElement 包含在已经包含任何其他xml 节点的XmlWriter 中,例如。如下所示的自定义根 xml 元素。
还可以对同一个XmlWriter 进行多个XElement.WriteTo 调用。

XElement xml = XElement.Parse("<foo>bar</foo>");

StringBuilder builder = new StringBuilder();    
using (XmlWriter writer = XmlWriter.Create(builder))
{
    writer.WriteStartDocument();
    writer.WriteStartElement("root");

    xml.WriteTo(writer);

    writer.WriteEndElement();
    writer.WriteEndDocument();
}

Console.WriteLine(builder.ToString());

以上结果:

<?xml version="1.0" encoding="utf-16"?>
<root>
   <foo>bar</foo>
</root>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多