2010-12-16 23 views
9

Ich habe einige XML in einem string im Speicher genau so:Wie lese ich XML in eine DataTable?

<symbols> 
    <symbol>EURCHF</symbol> 
    <symbol>EURGBP</symbol> 
    <symbol>EURJPY</symbol> 
    <symbol>EURUSD</symbol> 
</symbols> 

ich dies in eine DataTable lesen möchten. Ich mache es so:

DataTable dt = new DataTable(); 
dt.TableName = "symbols"; 
dt.Columns.Add("symbol"); 

if (!String.IsNullOrEmpty(symbols)) 
{ 
    dt.ReadXml(new StringReader(symbols)); 
} 

Allerdings, wenn ich die Anzahl der Zeilen zu überprüfen, die DataTable endet mit null Zeilen. Was mache ich falsch?

+0

Mögliche Duplikat [Code für eine XML-Datei in eine Datentabelle zu lesen] (http://stackoverflow.com/questions/9781796/code-for- reading-an-xml-file-in-a-datable) –

Antwort

14

Von hier aus: http://www.dreamincode.net/code/snippet3186.htm

// <summary> 
/// method for reading an XML file into a DataTable 
/// </summary> 
/// <param name="file">name (and path) of the XML file</param> 
/// <returns></returns> 
public DataTable ReadXML(string file) 
{ 
    //create the DataTable that will hold the data 
    DataTable table = new DataTable("XmlData"); 
    try 
    { 
     //open the file using a Stream 
     using(Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) 
     { 
      //create the table with the appropriate column names 
      table.Columns.Add("Name", typeof(string)); 
      table.Columns.Add("Power", typeof(int)); 
      table.Columns.Add("Location", typeof(string)); 

      //use ReadXml to read the XML stream 
      table.ReadXml(stream); 

      //return the results 
      return table; 
     }     
    } 
    catch (Exception ex) 
    { 
     return table; 
    } 
} 

Sie vielleicht einen Blick auf DataTable.ReadXml Methode nehmen wollen.

EDIT: Wenn Sie XML-Objekt im Speicher haben, können Sie die ReadXml-Methode direkt verwenden. DataTable.ReadXml(MemoryStream Object);

EDIT 2: Ich habe den Export. Das folgende XML-Schema erforderlich:

<?xml version="1.0" standalone="yes"?> 
<DocumentElement> 
    <symbols> 
    <symbol>EURCHF</symbol> 
    </symbols> 
    <symbols> 
    <symbol>EURGBP</symbol> 
    </symbols> 
    <symbols> 
    <symbol>EURJPY</symbol> 
    </symbols> 
</DocumentElement> 
+0

Das mache ich. Meine Frage ist warum hat meine Tabelle null Zeilen? Was ist falsch an meinem Code? –

+3

Höchstwahrscheinlich ein Schema-Problem. Versuchen Sie, eine ähnliche Datentabelle zu erstellen, und rufen Sie WriteXML auf. Dann überprüfe was geschrieben ist und vergleiche dein XML. Dies sollte die Zweifel beseitigen, warum Datatable leer ist. –

+0

Danke - das hat mir geholfen, es zu lösen. Ich habe es auf eine andere Art und Weise geschrieben und verwende jetzt 'DataTable.WriteXml' und es funktioniert super. –

2

Like this:

Dim strXmlString As String = "<tables><row><table_name>Table1</table_name><record_key>1</record_key></row>" 
strXmlString += "<row><table_name>Table2</table_name><record_key>2</record_key></row></tables>" 
Dim srXMLtext As System.IO.StringReader = New System.IO.StringReader(strXmlString) 

Dim dt As New DataTable 
dt.ReadXml(srXMLtext) 
+1

Hinweis: Sie müssen das Schema explizit zur DataTable hinzufügen (die im obigen Beispiel fehlt.) –

-2

Nutzungsdatensatzes anstelle von Datatable

0

Ein anderer Weg:

public DataTable ReadXML(string yourPath) 
 
     { 
 
      DataTable table = new DataTable("Item"); 
 
      try 
 
      { 
 
       DataSet lstNode = new DataSet(); 
 
       lstNode.ReadXml(yourPath); 
 
       table = lstNode.Tables["Item"]; 
 
       return table; 
 
      } 
 
      catch (Exception ex) 
 
      { 
 
       return table; 
 
      } 
 
     }

Und hier ist XML-Format:

<?xml version="1.0" encoding="utf-8" ?> 
 
<db> 
 
    <Item> 
 
    <Id>222</Id> 
 
    <OldCode>ZA</OldCode> 
 
    <NewCode>ZAF</NewCode> 
 
    <Name>Africa (South)</Name> 
 
    </Item> 
 
</db>

Verwandte Themen