2013-01-19 7 views
7

Nie mam doświadczenia z analizowaniem plików XML i zapisuję dane z wykresów liniowych do pliku xml, więc wykonałem trochę badań. Zgodnie z artykułem this, ze wszystkich sposobów czytania pliku XML, najszybszy jest DataSet. I ma sens, że używam DataSet, ponieważ może istnieć znaczna ilość danych. Oto jak wyglądają moje dokumenty wykres:Odczytaj plik XML jako 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> 

Ponieważ nie może być duża liczba punktów w tych liniach, muszę dostać się do danych, jak szybko i jak najmniejszych zasobów, jak to możliwe. Jeśli istnieje szybsze podejście niż DataSet, proszę oświeć mnie. W przeciwnym razie, czy ktoś mógłby mi pokazać, w jaki sposób otrzymam dane z wykresu, używając DataSet jako mojego parsera XML?

Odpowiedz

10

Jeśli chcesz użyć DataSet, jest to bardzo proste.

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

Jeśli chcesz czegoś szybciej, możesz wypróbować XmlReader, który czyta wiersz po linii. Ale jest trochę trudniej się rozwijać. Możesz to zobaczyć tutaj: http://msdn.microsoft.com/library/cc189056(v=vs.95).aspx

+0

InferSchema pomógł mi przed którym właśnie został importowany z pustych wierszy – user2648008

4

Inną prostą metodą jest użycie wbudowanej metody "ReadXml".

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

Uwaga: plik XML powinien być uporządkowany.

Reference