Entwickler-Ecke
IO, XML und Registry - foreach-Schleife bei XML-Datei Auslesen wird ignoriert
Eagle92 - Mo 11.07.11 13:41
Titel: foreach-Schleife bei XML-Datei Auslesen wird ignoriert
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:
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:
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
Th69: Titel geändert.
Moderiert von
Th69: Topic aus WinForms verschoben am Mo 11.07.2011 um 14:26
Moderiert von
Christian S.: C#- durch XML-Tags ersetzt
dark-destination1988 - Mo 11.07.11 13:50
schonmal durchdebuggt? geht er gar nicht erst rein? sind elemente vorhanden?
Trashkid2000 - 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.
C#-Quelltext
1: 2: 3: 4:
| foreach (var productElement in rootElement.Elements("auto")) { } |
LG
Eagle92 - Mo 11.07.11 13:59
Trashkid2000 hat folgendes geschrieben : |
Hallo,
Dein Rootelement ist "Autos", und darin sind andere "auto"-Elemente enthalten.
Also müsstest Du nur vom Rootelement die "auto"-Elemente durchgehen.
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 - 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:
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);
foreach (var productElement in rootElement.Elements("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.:
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 - 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:
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
Eagle92 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!