2011-10-18 28 views
17

Cómo convertir cadena XML a DataTable en C#?Cadena XML a DataTable en C#

He probado el siguiente código:

public DataTable stam() 
    { 
     string xmlData = "<Names><Name>a</Name><Name>b</Name><Name>c</Name><Name>d</Name></Names>"; 

     XElement x = XElement.Parse(xmlData); 

     DataTable dt = new DataTable(); 

     XElement setup = (from p in x.Descendants() select p).First(); 
     foreach (XElement xe in setup.Descendants()) // build your DataTable 
      dt.Columns.Add(new DataColumn(xe.Name.ToString(), typeof(string))); // add columns to your dt 

     var all = from p in x.Descendants(setup.Name.ToString()) select p; 
     foreach (XElement xe in all) 
     { 
      DataRow dr = dt.NewRow(); 
      foreach (XElement xe2 in xe.Descendants()) 
       dr[xe2.Name.ToString()] = xe2.Value; //add in the values 
      dt.Rows.Add(dr); 
     } 
     return dt; 

    } 

y devuelve un DataTable vacía.

Respuesta

44
public DataTable stam()  
{ 
    StringReader theReader = new StringReader(xmlData); 
    DataSet theDataSet = new DataSet(); 
    theDataSet.ReadXml(theReader); 

    return theDataSet.Tables[0]; 
} 

Puede utilizar un StringReader para cargarlo en un DataSet. A partir de ahí, la tabla con el primer índice contendrá el DataTable.

+0

Nice one code dear ... – Developer

+0

¡Una búsqueda larga ha encontrado un final con su respuesta! Gracias. – peter70