В чем разница между XElement.WriteTo (XmlWriter) и XElement.Save (XmlWriter)? - PullRequest

1 Ответ

0 голосов
/ 20 ноября 2018

XElement.Save(XmlWriter) записывает полный XML-документ в цель XmlWriter, включая объявления начала и конца документа.
Чтобы записать содержимое самого XElement, он вызывает то же самоеWriteTo method.

Из справочного источника .NET :

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


XElement.WriteTo(XmlWriter) просто записывает данные XElement в цель XmlWriter.

Из справочного источника .NET :

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

Это позволяет XElementбыть включенным в XmlWriter, уже содержащий любые другие узлы xml, например.пользовательский корневой элемент xml, как показано ниже.
Также можно сделать несколько вызовов XElement.WriteTo для одного и того же XmlWriter.

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>
...