2013-01-19 8 views
7

Non ho esperienza con l'analisi dei file XML e sto salvando i dati del grafico lineare in un file xml, quindi ho fatto un po 'di ricerca. Secondo l'articolo this, tra tutti i modi di leggere un file XML, DataSet è il più veloce. E ha senso che io usi DataSet poiché potrebbe esserci una quantità significativa di dati. Ecco come i miei documenti grafico guardare:Legge il file XML come DataSet

<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
<BreezyCalc> 
    <Graph Version="3.0" Mode="static"> 
     <Range> 
      <X Min="-20" Max="20" /> 
      <Y Min="-20" Max="20" /> 
     </Range> 
     <Lines> 
      <Line Name="MyLine1" R="0" G="255" B="0"> 
       <Point X="-17" Y="9" /> 
       <Point X="7" Y="-5" /> 
       <Point X="10" Y="4" /> 
       <Point X="-6" Y="2" /> 
      </Line> 
      <Line Name="MyLine2" R="255" G="0" B="0"> 
       <Point X="-7" Y="3" /> 
       <Point X="8" Y="-1" /> 
       <Point X="-4" Y="-4" /> 
       <Point X="-1" Y="6" /> 
      </Line> 
     </Lines> 
    </Graph> 
</BreezyCalc> 

Dal momento che ci potrebbe essere un gran numero di punti in queste righe, ho bisogno di ottenere i dati più rapidamente e con un minimo di risorse possibili. Se c'è un approccio più veloce di DataSet, per favore chiariscimi. Altrimenti, qualcuno potrebbe mostrarmi come ottenere i dati del mio grafico usando un DataSet come parser XML?

risposta

10

Se si desidera utilizzare un DataSet, è molto semplice.

// Here your xml file 
string xmlFile = "Data.xml"; 

DataSet dataSet = new DataSet(); 
dataSet.ReadXml(xmlFile, XmlReadMode.InferSchema); 

// Then display informations to test 
foreach (DataTable table in dataSet.Tables) 
{ 
    Console.WriteLine(table); 
    for (int i = 0; i < table.Columns.Count; ++i) 
     Console.Write("\t" + table.Columns[i].ColumnName.Substring(0, Math.Min(6, table.Columns[i].ColumnName.Length))); 
    Console.WriteLine(); 
    foreach (var row in table.AsEnumerable()) 
    { 
     for (int i = 0; i < table.Columns.Count; ++i) 
     { 
      Console.Write("\t" + row[i]); 
     } 
     Console.WriteLine(); 
    } 
} 

Se si desidera qualcosa più veloce, è possibile provare con XmlReader che legge riga dopo riga. Ma è un po 'più difficile da sviluppare. Potete vederlo qui: http://msdn.microsoft.com/library/cc189056(v=vs.95).aspx

+0

InferSchema mi ha aiutato prima che ha ottenuto appena importato con righe vuote – user2648008

4

Altro metodo semplice utilizza il metodo integrato "ReadXml".

string filePath = "D:\\Self Practice\\Sol1\\Sol1\\Information.xml"; 
DataSet ds = new DataSet(); 
ds.ReadXml(filePath); 

Nota: il file XML deve essere ordinato.

Reference