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