Desenvolvimento - C#

Gerar Xml Dinâmicamente

Existem casos em que precisamos gerar dinamicamente arquivos xml vindos de uma base de dados, o problema sempre se dá no tipo de dados que a mesma contém.

por Francke Peixoto



Existem casos em que precisamos gerar dinamicamente arquivos xml vindos de uma base de dados, o problema sempre se dá no tipo de dados que a mesma contém.

Mediante este problema, decidi escrever este artigo.

Gerar um arquivo xml em .NET é algo tão simples que depois deste artigo possivelmente abriremos nossas mentes para outros tipos de conversão dimâmica usando o Framework .Net.

Então deixamos de papo e vamos por a mão na massa!

Vamos iniciar este artigo.

1 - Antes de qualquer coisa devemos declarar o nomespace using System.Xml;

Após isso escreveremos a classe abaixo:

public class ClassXML

{

private XmlDocument xmldoc;

private XmlNode xmlnode;

private string _xmlpath;

public string XmlPath {

get { return _xmlpath; }

set { _xmlpath = value; }

}

public ClassXML(){}

public XmlDocument GerarXML(DataTable tabela)

{

string parametros;

xmldoc = new XmlDocument();

xmlnode = xmldoc.CreateXmlDeclaration("1.0", "UTF-8", null);

xmldoc.AppendChild(xmlnode);

// caso a tabela não possua nenhum nome geramos o nome TABELA

parametros = ((tabela.TableName.ToString() == null) ? "TABELA" : tabela.TableName.ToString().ToUpper());

xmlnode = xmldoc.CreateElement(parametros.ToUpper());

xmldoc.AppendChild(xmlnode);

// Aqui começamos a criar toda estrutura do xml.

foreach (DataRow linha in tabela.Rows)

{

xmlnode = xmldoc.CreateElement(parametros + "_linha");

for (int i = 0; i < linha.Table.Columns.Count; i++)

{

XmlNode xmlnode_parente = xmldoc.CreateElement(linha.Table.Columns[i].ColumnName.ToString().ToUpper(),

linha.Table.Columns[i].ColumnName.ToString().ToUpper(),

null);

xmlnode_parente.InnerText = linha[i].ToString();

xmlnode.AppendChild(xmlnode_parente);

xmldoc.SelectSingleNode("/" + parametros.ToUpper() + "").AppendChild(xmlnode);

}

}

LimparDocumento();

return xmldoc;

}

}

2 – Agora com nossa classe devidamente criada, iremos criar um WebForm.aspx e em seu Page_Load iremos criar um DataTable.

Vamos aproveitar este artigo para mostrar como criar e carregar um DataTable manualmente, lembrando que você poderá carregar um DataTable através de uma conexão ao seu bando de dados ou arquivo texto e etc.

Inicaremos agora nosso trablaho dentro do arquivoWebForm.aspx , mas precisamente dentro de seu Page_Load (WebForm.aspx.cs).

protected void Page_Load(object sender, EventArgs e)

{

// Random para criar valores pseudo-aleatórios.

Random rnd = new Random();

// Instânciando nossa Tabela.

DataTable tb = new DataTable("TB");

// Criando a Coluna * você poderá criar quantas quiser.

tb.Columns.Add("Idade");

for (int i = 0; i < 10; i++)

{

// Aqui estamos adicionando novas linhas ao nosso DataTable.

int idade = rnd.Next(18, 50);

DataRow linha = tb.NewRow();

linha["IDADE"] = idade.ToString();

tb.Rows.Add(linha);

}

// instânciando nosso obj xml.

ClassXML clsxml = new ClassXML();

// Limpando o documento e informando ao navegador que ele é do tipo XML.

Response.Clear();

Response.ClearContent();

Response.ClearHeaders();

Response.ContentType = "text/xml";

// Gerar o XML com o conteudo de nossa tabela.

Response.Write(x.GerarXML(tb).OuterXml);

Response.End();

}

Ao acessar está página em um browse o resultado será o o mostrado abaixo:



Baixe aqui o código fonte.

Francke Peixoto

Francke Peixoto