Entwickler-Ecke

IO, XML und Registry - XML an DataGridView


WalterZ - Do 10.03.11 23:55
Titel: XML an DataGridView
Hallo,

der nachfolgende Code zeigt mir ein Ergebnis im DataGridView an, allerdings noch nicht das gewünschte:


C#-Quelltext
1:
2:
3:
XElement xElement = XElement.Load("INDEX.xml");
dataGridView1.DataSource = (from el in xElement.Descendants()                                    
   select new {  el.FirstNode, el.NextNode,  el.LastNode}).ToList() ;


Meine Fragen:

1. Was muss ich verändern, damit ich z.B. el.FirstNode.Name oder el.First.Node.Value erhalte ?
So wie hier notiert gehts auf jeden Fall nicht.

2. Wie erreiche ich auch die anderen Knoten nach NextNode und vor LastNode ?

Danke für eine Antwort

Walter

Moderiert von user profile iconKha: C#-Tags hinzugefügt


Kha - Fr 11.03.11 02:54

user profile iconWalterZ hat folgendes geschrieben Zum zitierten Posting springen:
der nachfolgende Code zeigt mir ein Ergebnis im DataGridView an, allerdings noch nicht das gewünschte:
Entschuldigung, aber ist die Fragestellung dein Ernst? Wenn uns sowohl Ist- als auch Soll-Zustand verschwiegen wird, sind wir als Antwortgeber ziemlich aufgeschmissen.

user profile iconWalterZ hat folgendes geschrieben Zum zitierten Posting springen:
2. Wie erreiche ich auch die anderen Knoten nach NextNode und vor LastNode ?
el.Elements() sind alle Kinder als IEnumerable<XElement>.


WalterZ - So 13.03.11 02:40

Hallo,


nachfolgend ein Ausschnitt des sehr komplexen XML-Dokuments.



XML-Daten
1:
2:
3:
4:
5:
6:
7:
<Table>
      <URL>s2011.txt</URL>
      <Name>Sachkonten 2011</Name>
      <Description>Sachkonten 2011</Description>
      <DecimalSymbol>,</DecimalSymbol>
      <DigitGroupingSymbol>.</DigitGroupingSymbol>
      <Range><From>2</From></Range>


ab hier will ich zugreifen:


XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
<VariableLength>
  <VariableColumn>
    <Name>Kontonummer</Name>
    <Description>Kontonummer alphanumerisch zum Erhalt fuehrender Nullen   
    </Description>
   <AlphaNumeric/>
   <MaxLength>7</MaxLength>
  </VariableColumn>
  <VariableColumn>
     <Name>Kuerzel</Name>
     <Description>Kürzel</Description>
     <AlphaNumeric/>
    <MaxLength>8</MaxLength>
    </VariableColumn>
    <VariableColumn>
       <Name>Name</Name>
       <Description>Name</Description>
       <AlphaNumeric/>
       <MaxLength>40</MaxLength>
    </VariableColumn>
<VariableColumn>
      <Name>Eroeffnungsdatum</Name>
      <Description>Eröffnungsdatum</Description>
      <Date>  
      <Format>DD.MM.YYYY</Format>
      </Date>
</VariableColumn>


...

Nun bin ich schon eine Schritt weiter: wenn ich das Name-Element des Tags VariableColumn auslesen will, dann erreiche ich so das erste Element:


C#-Quelltext
1:
2:
3:
4:
 var E = (from el in xElement.Descendants("Table")
                     where (string)el.Element("URL").Value   == ("s2011.txt")
                     select new
                    {  Name = (string)el.Descendants("VariableColumn").Elements("Name").First()         });



... und mit .Last() erreiche ich das letzte Element.
Aber: es ist immer noch nicht klar, wie ich die Elemente dazwischen erreichen kann.

Gruß
Walter

Moderiert von user profile iconKha: XML-Tags hinzugefügt
Moderiert von user profile iconKha: C#-Tags hinzugefügt


Kha - So 13.03.11 20:05

Unter der Annahme, dass die URLs eindeutig sind, ist hier Single besser geeignet:

C#-Quelltext
1:
IEnumerable<XElement> variableColumns = xElement.Descendants("Table").Single(el => el.Element("URL").Value == "s2011.txt").Descendants("VariableColumn");                    


Dann kannst du über variableColumns iterieren und erhälst jeweils ein XElement, das einen <VariableColumn>-Knoten repräsentiert; mit .Element("Name").Value kommst du an dessen Namen.