2016-08-05 28 views
-1

Ich habe ein Problem.XML-Editor in C# - jetzt zeigt Felder

Ich habe eine XML-Datei, die Datenfelder haben, die ich in einer Datagridview lesen möchte.

DIE XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<DATAPACKET Version="2.0"> 
    <METADATA> 
     <FIELDS> 
      <FIELD attrname="ALMO_Exercicio" fieldtype="string" WIDTH="4"/> 
      <FIELD attrname="ALMO_MesReferencia" fieldtype="string" WIDTH="2"/> 
      <FIELD attrname="ALMO_Saldo" fieldtype="string" WIDTH="17"/> 
     </FIELDS> 
     <PARAMS/> 
    </METADATA> 
    <ROWDATA> 
     <ROW ALMO_Exercicio="2016" ALMO_MesReferencia="01" ALMO_Saldo="0.00"/> 
    </ROWDATA> 
</DATAPACKET> 

Die C# Datei, die diese Zeilen lesen:

try 
{ 
    XmlReader xmlFile = XmlReader.Create(ofd.FileName, new XmlReaderSettings()); 
    ds.ReadXml(xmlFile); 
    dataGridView1.DataSource = ds.Tables[0].DefaultView; 
} 

das einzige, was also, dass, wenn ich zeigen, öffnen ist: software only shows the version of xml file

Was muss ich machen?

+0

Sie betrachten die erste Tabelle, die 'DATAPACKET' ist. Hast du einige der anderen ausprobiert (es gibt 6)? Was willst du eigentlich zeigen? –

+0

Wie wurde das XML erstellt? Ist 'ds' vom Typ' DataSet'? Ihre XML-Datei sieht für mich nicht nach einem 'DataSet' aus. Ich denke, du musst dein XML selbst bearbeiten. –

+0

@CharlesMager Ich habe nicht versucht, ich möchte alle Daten aus den Feldern anzeigen: ALMO_Exercicio, ALMO_MesReferencia, ALMO_Saldo. BastianThiede Das XML wurde von einer anderen Software (Governmental Software) erstellt, die ich brauche, um Daten von meiner Software wieder zu senden. Also, wie kann ich meinen Code ändern, um das XML zu verarbeiten? Hier der Link für den vollständigen Code mit XML-Datei: https://drive.google.com/file/d/0Bxgpn5JmX9HdQXZXUzNjRVIzZmc/view?usp=sharing –

Antwort

0

Sie müssen das XML selbst verarbeiten, Sie können es nicht einfach in ein DataSet wie es ist laden.

Sie können Spalten von jedem FIELD erstellen und dann die Zeilendaten abrufen, indem Sie die Attribute der gleichen Namen von jedem ROW finden. Das ist ziemlich trivial mit LINQ to XML:

var doc = XDocument.Load(ofd.FileName); 

var columns = doc.Descendants("FIELD") 
    .Attributes("attrname") 
    .Select(fieldName => new DataColumn(fieldName.Value)) 
    .ToArray(); 

var rows = doc.Descendants("ROW") 
    .Select(row => columns.Select(col => (string)row.Attribute(col.ColumnName)).ToArray()); 

Sie dann eine DataTable daraus erstellen:

var table = new DataTable(); 

table.Columns.AddRange(columns); 

foreach (var row in rows) 
{ 
    table.Rows.Add(row); 
} 

Siehe this fiddle für eine funktionierende Demo.

+0

Danke Charles, DANKE! Schätze wirklich deine Hilfe. –

+0

Ich habe noch eine Frage: In Ihrem Code in Geige er öffnen Sie die XML-Texte in der C# -Quelle eingebettet, aber ich habe eine Schaltfläche, Öffnen Sie die Datei, die ich möchte, haben noch einen Tipp? –

+0

@LeandroMachado Der Fragecode verwendet den Dateinamen der geöffneten Datei. Ist es das wonach du suchst? –