por Cesar Cassiano Schimanco

3 formas de criar e salvar arquivo XML (C# / XmlTextWriter)

Neste artigo vou mostrar 3 exemplos diferente de como criar um arquivo xml dinamicamente usando XmlTextWriter do C#.
Vamos ao primeiro exemplo que vai criar e responder o xml no browser.

A estrutura gerada será esta.

<?xml version="1.0" encoding="utf-8"?>
<!--Início-->
<linguagens>
 <linguagen atributo="valor">ASP.NET</linguagen>
 <linguagen><![CDATA[C#]]></linguagen>
</linguagens>
<!--Fim-->

 exemplo1.cs

using System.Xml;
using System.Text;
...

Response.Clear();
Response.Charset = "utf-8";
//Esta linha vai fazer com que a página retorne um XML e não mais HTML
Response.ContentType = "text/xml";
//Criar o arquivo em memória usando a codificação UTF8
XmlTextWriter xtw = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
//A linha abaixo vai identar o código, se não usar isso tudo ficará em uma linha.
xtw.Formatting = Formatting.Indented;
//Define o espaçamento da tabulação
xtw.Indentation = 2;

//Escreve a declaração do documento <?xml version="1.0" encoding="utf-8"?>
xtw.WriteStartDocument();
//Adicionar o comentário: <!-- Início -->
xtw.WriteComment("Início");
//cria o elemento raiz <linguagens>
xtw.WriteStartElement("linguagens");
//Inicia o elemento <linguagen>
xtw.WriteStartElement("linguagen");
//Adiciona um atributo ao elemento <linguagen atributo="valor">
xtw.WriteAttributeString("atributo", "valor");
//Escreve o valor do elemento <linguagen>
xtw.WriteString("ASP.NET");
//Fecha o elemento </linguagen>
xtw.WriteEndElement();
//Inicia um novo elemento <linguagen>
xtw.WriteStartElement("linguagen");
//agora adiciona um valor com CDATA <![CDATA[C#]]>
xtw.WriteCData("C#");
//Fecha o elemento </linguagen>
xtw.WriteEndElement();
//fecha o elemento raiz
xtw.WriteEndElement();
//Adicionar o comentário: <!-- Fim -->
xtw.WriteComment("Fim");

xtw.WriteEndDocument();

//libera o XmlTextWriter
xtw.Flush();
//fechar o XmlTextWriter
xtw.Close();
//Termina aqui
Response.End();

 

Agora vou criar o XML e mandar ele para o browser como download.
Ou seja, vou criar o xml em memória e fazer download dele como se fosse um arquivo físico.

A estrutura do XML gerado é esta.

<?xml version="1.0" encoding="utf-8"?>
<linguagens>
 <linguagen><![CDATA[ASP]]></linguagen>
 <linguagen><![CDATA[ASP.NET]]></linguagen>
 <linguagen><![CDATA[PHP]]></linguagen>
 <linguagen><![CDATA[JSP]]></linguagen>
</linguagens>

exemplo2.cs

using System.Xml;
using System.Text;
...

Response.Clear();
Response.Charset = "utf-8";
Response.ContentType = "text/xml";

//vai para o browser como download
Response.ContentType = "application/octet-stream";
//aqui você pode definir o nome do arquivo
Response.AddHeader("Content-Disposition", "attachment; filename=NOME_DO_ARQUIVO.xml");
//Criar o arquivo em memória usando a codificação UTF8
XmlTextWriter xtw = new XmlTextWriter(Response.OutputStream, Encoding.UTF8);
//A linha abaixo vai identar o código para não ficar em uma linha só.
xtw.Formatting = Formatting.Indented;

//Escreve a declaração do documento <?xml version="1.0" encoding="utf-8"?>
xtw.WriteStartDocument();
//cria o elemento raiz <linguagens>
xtw.WriteStartElement("linguagens");
        
foreach (string valor in new string[] { "ASP", "ASP.NET", "PHP", "JSP" })
{
    //Inicia o elemento <linguagen>
    xtw.WriteStartElement("linguagen");
    //agora adiciona o valor com CDATA <![CDATA[ASP]]>
    xtw.WriteCData(valor);
    //Fecha o elemento </linguagen>
    xtw.WriteEndElement();
}
//fecha o elemento raiz
xtw.WriteEndElement();
xtw.WriteEndDocument();

//libera o XmlTextWriter
xtw.Flush();
//fechar o XmlTextWriter
xtw.Close();
//Termina aqui
Response.End();

 

Neste último exemplo vou criar um XML mais complexo e salvar o arquivo gerado em disco.

O XML gerado foi este

<?xml version="1.0" encoding="utf-8"?>
<blog>
 <artigos linguagem="asp.net">
    <artigo>
     <titulo>DataSet para XML em ASP.NET / C#</titulo>
     <url>http://cbsa.com.br/post/dataset-para-xml-em-aspnet-c.aspx</url>
    </artigo>
    <artigo>
     <titulo>XML para DataSet em ASP.NET / C#</titulo>
     <url>http://cbsa.com.br/post/xml-para-dataset-em-aspnet-c.aspx</url>
    </artigo>
    <artigo>
     <titulo>Ler arquivo XML usando XmlTextReader e XmlDocument em C# - ASP.NET</titulo>
     <url>http://cbsa.com.br/post/ler-arquivo-xml-usando-xmltextreader-e-xmldocument-em-c---aspnet.aspx</url>
    </artigo>
 </artigos>
 <artigos linguagem="C#">
    <artigo>
     <titulo>Calcular idade em C#</titulo>
     <url>http://cbsa.com.br/post/calcular-idade-em-c.aspx</url>
    </artigo>
 </artigos>
</blog>

exemplo3.cs

using System.Xml;
using System.Text;
...

Response.Clear();
Response.Charset = "utf-8";

//Caminho onde o arquivo será salvo, no meu caso será:
//C:\inetpub\wwwroot\exemplos\exemplo3.xml
string strFilePath = Server.MapPath("~/exemplo3.xml");
//Esta linha indica que o o arquivo xml sera salvo, diferente dos outros exemplos
XmlTextWriter xtw = new XmlTextWriter(strFilePath, Encoding.UTF8);
//A linha abaixo vai identar o código, se não usar isso tudo ficará em uma linha.
xtw.Formatting = Formatting.Indented;

//Escreve a declaração do documento <?xml version="1.0" encoding="utf-8"?>
xtw.WriteStartDocument();

xtw.WriteStartElement("blog");
    xtw.WriteStartElement("artigos");
    xtw.WriteAttributeString("linguagem", "asp.net");
        xtw.WriteStartElement("artigo");
            xtw.WriteElementString("titulo", "DataSet para XML em ASP.NET / C#");
            xtw.WriteElementString("url", "http://cbsa.com.br/post/dataset-para-xml-em-aspnet-c.aspx");
        xtw.WriteEndElement();
        xtw.WriteStartElement("artigo");
            xtw.WriteElementString("titulo", "XML para DataSet em ASP.NET / C#");
            xtw.WriteElementString("url", "http://cbsa.com.br/post/xml-para-dataset-em-aspnet-c.aspx");
        xtw.WriteEndElement();
        xtw.WriteStartElement("artigo");
            xtw.WriteElementString("titulo", "Ler arquivo XML usando XmlTextReader e XmlDocument em C# - ASP.NET");
            xtw.WriteElementString("url", "http://cbsa.com.br/post/ler-arquivo-xml-usando-xmltextreader-e-xmldocument-em-c---aspnet.aspx");
        xtw.WriteEndElement();
    xtw.WriteEndElement();
    xtw.WriteStartElement("artigos");
    xtw.WriteAttributeString("linguagem", "C#");
        xtw.WriteStartElement("artigo");
            xtw.WriteElementString("titulo", "Calcular idade em C#");
            xtw.WriteElementString("url", "http://cbsa.com.br/post/calcular-idade-em-c.aspx");
        xtw.WriteEndElement();
    xtw.WriteEndElement();
xtw.WriteEndElement();

xtw.WriteEndDocument();

//libera o XmlTextWriter
xtw.Flush();
//fechar o XmlTextWriter
xtw.Close();
//Termina aqui

 

E para ler ou abrir arquivo xml com C# tem este artigo aqui:
http://cbsa.com.br/post/ler-arquivo-xml-usando-xmltextreader-e-xmldocument-em-c---aspnet.aspx
 
Talvez usar XML como banco de dados também seja interessante.

Se preferir pode fazer download dos exemplos aqui

Comentários

Carregando comentários

Postar um novo comentário



Processando...