Categorias

Gerar Xml Dinâmicamente

1 – Usaremos o namespace 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.

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();
    }

Agora execute a página e verá o resultado.

Bom até a próxima!