Configurando a gravação do XML com XmlWriter

A gravação de arquivos XML é bastante simplifIcada no ambiente .NET graças ao namespace System.Xml.

Uma das classes que provê várias opções para formatação do documento é XmlWriter.

Com esta classe você pode criar seu documento e gravar no disco como no código demonstrado abaixo:

Listagem 1 – Gravando um documento

using System;
using System.Xml;

public class Program
{
    public static void Main(string[] args)
    {
        // cria o documento
        XmlDocument xmlDoc = new XmlDocument();
        // carrega o conteúdo
        xmlDoc.LoadXml(@"<xml>
            <disco>
                <titulo>Brothers in Arms</titulo>
                <artista>Dire Straits</artista>
                <ano>1982</ano>
            </disco>
        </xml>");

        // cria o XmlWriter
        XmlWriter oXmlWriter =
            XmlWriter.Create(@"d:\discos.xml");
        // grava o arquivo e fecha
        xmlDoc.Save(oXmlWriter);
        oXmlWriter.Flush();
        oXmlWriter.Close();

    }
}

Mas, existem casos em que precisamos otimizar este processo de gravação do documento XML.

Um exemplo é quando por motivos de economia do consumo de banda de uma rede precisamos remover todos os espaços em branco e quebras de linha do documento e precisamos envia-lo somente com seu conteúdo.

Neste caso, além do XmlWriter, devemos agregar a este um XmlWriterSettings.

Verifique as propriedades “Indent”, “IndentChars”, “NewLineChars” para poder controlar os espaços em branco e quebras de linha do documento Xml.

A forma de usar é basicamente a seguinte:

  1. Crie uma instância de XmlWriterSettings.
  2. Configure as propriedades como desejado.
  3. Crie uma nova instância de XmlWriter passando no construtor o nome do arquivo e o objeto XmlWriterSettings.
  4. Faça as operações com seu documento Xml.

Abaixo segue um exemplo do que foi exposto acima.

Listagem 2 – Exemplo de XmlWriterSettings

using System;
using System.Xml;

public class Program
{
    public static void Main(string[] args)
    {
        // cria o documento
        XmlDocument xmlDoc = new XmlDocument();
        // carrega o conteúdo
        xmlDoc.LoadXml(@"<xml>
            <disco>
                <titulo>Brothers in Arms</titulo>
                <artista>Dire Straits</artista>
                <ano>1982</ano>
            </disco>
        </xml>");

        // cria o XmlWriterSettings
        XmlWriterSettings xmlSetting =
            new XmlWriterSettings();
        xmlSetting.NewLineChars = "";
        xmlSetting.NewLineOnAttributes = false;

        // cria o XmlWriter
        XmlWriter oXmlWriter =
            XmlWriter.Create(@"d:\discos.xml", xmlSetting);
        // grava o arquivo e fecha
        xmlDoc.Save(oXmlWriter);
        oXmlWriter.Flush();
        oXmlWriter.Close();
    }
}

Fica aqui a dica: embora estes exemplos estejam em C#, deve ser fácil para você transformar isto em outra linguagem do framework .NET. Recentemente meu colega de trabalho Márcio Althmann (http://www.marcioaltmann.net) fez um comentário interessante:

Pessoal uma vez um amigo disse, gaste 20% do seu tempo utilizando C#, e 80% do tempo estudando o .NET Framework, e é verdade, 99% do que precisa está no Framework, é só saber utilizar.”

Grande abraço e até a próxima.