Autor Beitrag
Eagle92
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 11.07.11 13:41 
Hallo liebe Mitglieder,

folgendes problem bietet sich mir. Beim Versuch eine XML-Datei auszulesen wird meine foreach schleife ignoriert vielleicht weiß jemand um Rat würd mich freuen.

Die XML Datei sieht wie folgt aus:

ausblenden 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:
<?xml version="1.0" encoding="utf-8"?>

<Autos>
  <auto>
    <name>BMW 316 I Kompakt</name>
    <kennzeichen>LIP PH 73</kennzeichen>
    <ps>96</ps>
    <Farbe>Schwarz</Farbe>
  </auto>
  
  <auto>
    <name>Toyota Supra</name>
    <kennzeichen>LIP KJ 109</kennzeichen>
    <ps>170</ps>
    <Farbe>Silber Metallic</Farbe>
  </auto>
  
  <auto>
    <name>Mazda RX-7</name>
    <kennzeichen>ST Q 9</kennzeichen>
    <ps>230</ps>
    <Farbe>Dunkel Blau</Farbe>
  </auto>
</Autos>


und diesen Programmier Code verwende ich:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
public void Auslesen()
        {
           
            XElement rootElement = XElement.Load(@"C:\\Praktikum_20_06_2011\\Parser_Xml\\Parser_Xml\\Autos_XML.xml");
               
                foreach (var productElement in rootElement.Elements("Autos"))
                {
                    Console.WriteLine(productElement.Attribute("auto").Value);
                    Console.WriteLine("Name: " + productElement.Element("name").Value);                  
                    Console.WriteLine();
                }
            
        }


Mit freundlichen Grüßen

Patrick

Moderiert von user profile iconTh69: Titel geändert.
Moderiert von user profile iconTh69: Topic aus WinForms verschoben am Mo 11.07.2011 um 14:26
Moderiert von user profile iconChristian S.: C#- durch XML-Tags ersetzt
dark-destination1988
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178
Erhaltene Danke: 21



BeitragVerfasst: Mo 11.07.11 13:50 
schonmal durchdebuggt? geht er gar nicht erst rein? sind elemente vorhanden?
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Mo 11.07.11 13:52 
Hallo,
Dein Rootelement ist "Autos", und darin sind andere "auto"-Elemente enthalten.
Also müsstest Du nur vom Rootelement die "auto"-Elemente durchgehen.
ausblenden C#-Quelltext
1:
2:
3:
4:
foreach (var productElement in rootElement.Elements("auto"))
{
   //...
}

LG

Für diesen Beitrag haben gedankt: Eagle92
Eagle92 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Mo 11.07.11 13:59 
user profile iconTrashkid2000 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,
Dein Rootelement ist "Autos", und darin sind andere "auto"-Elemente enthalten.
Also müsstest Du nur vom Rootelement die "auto"-Elemente durchgehen.
ausblenden C#-Quelltext
1:
2:
3:
4:
foreach (var productElement in rootElement.Elements("auto"))
{
   //...
}

LG


Dankeschön, hätte ich selber drauf kommen können. :-)
Eagle92 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Di 12.07.11 15:28 
Eine Neue frage bietet sich mir nun,

Ich habe mitlerweile verschiedenes richtung Ausgabe der Nodes von XML Datein ausprobiert und mich dazu entschieden folgendes an zu wenden:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
  try
            {
                XElement rootElement = XElement.Load(config.Getpath);

                // Bereich der "Outputs" wird gewählt.

                    foreach (var productElement in rootElement.Elements("Outputs"))
                    {

                        // Ausgabe der Outputs.

                        Console.WriteLine(rootElement.Element("Outputs").Value);
                    }
                
                data.TypCalculation(rootElement);
            }
            catch (Exception)
            {
                Console.WriteLine("Fehlerhafte angaben");
            }


Mit dieser Methode steht mir die möglichkeit offen die Inputs und Outputs von einander zu trennen und dann in eine Liste zu sichern um sie dann aus zu geben,
allerdings erscheint die Ausgabe in einer Zeile, was wiederrum nicht sehr vorteilhaft für weitere Anwender dieses Programmes ist, ab eine bestimmte Anzahl von Daten ist der Überblick verloren.
Desweiteren habe ich in meiner XML-Datei Instanzen gesetzt mit denen ich gern die Daten mit einer Leerzeile von einander Trennen würde.

Jeweils bei den einzelnen Attributen sollte auch ein Zeilenumbruch stattfinden.

Vielleicht weiß ja jemand um Rat und könnte mir bei diesem Problem helfen.

Hier die neue XML-Datei mit der Struktur die als Standardt gilt für weiteren gebrauch des Projekts.:

ausblenden volle Höhe C#-Quelltext
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:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
<?xml version="1.0" encoding="utf-8"?>

<XML Beschreibungsdatei="Fuer_ein_Modul">

<ModuleName>Modul_1</ModuleName>
<Gruppenname>Gruppe_1</Gruppenname>

    <Outputs>
      <Instanz1>
        <VariableName>Variable_1</VariableName>
        <VariableType>double</VariableType>
        <InitialValue>15.2</InitialValue>

        <VariableName>Variable_2</VariableName>
        <VariableType>int</VariableType>
        <InitialValue>306</InitialValue>
      </Instanz1>

      <Instanz2>
        <VariableName>Variable_3</VariableName>
        <VariableType>long</VariableType>
        <InitialValue>54418</InitialValue>
      </Instanz2>
    </Outputs>    
        
    <Input>
      <Instanz3>
        <VariableName>Variable_4</VariableName>
        <VariableType>double</VariableType>
                    
        <VariableName>Variable_5</VariableName>
        <VariableType>int</VariableType>
      </Instanz3>


      <Instanz4>
        <VariableName>Variable_6</VariableName>
        <VariableType>long</VariableType>
      </Instanz4>
    </Input>

 
</XML>


Erneut wäre ich euch sehr dankbar für weitere Hilfe,

Mit freundlichen Grüßen

Patrick
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Di 12.07.11 15:47 
Hallo,
bitte erstelle für jede neue Frage einen neuen Thread, da es ansonsten sehr schwer ist, duchzusehen.
Zu dem Problem: So schwer ist es doch garnicht. Du musst Dich doch bloß von Knoten zu Knoten durcharbeiten.
Also z.B. so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
foreach (var productElement in rootElement.Elements("Outputs"))
{
  foreach (var instanceNode in productElement.Elements())
  {
    Console.WriteLine(instanceNode.Name);
    foreach (var variableNode in instanceNode.Elements())
    {
      Console.WriteLine(string.Format("{0}: {1}", variableNode.Name, variableNode.Value));        
    }
  }
}

LG

Für diesen Beitrag haben gedankt: Eagle92
Eagle92 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31



BeitragVerfasst: Di 12.07.11 15:51 
Danke für die schnelle Antwort, genauso sollte das aussehen und ich werde dein Rat beherzigen und beim nächsten mal einen Neuen Thread eröffnen.

Mit freundlich Grüßen

Patrick