Rekon1602 Geschrieben 26. April 2010 Geschrieben 26. April 2010 Hallo Ich hab grad ein kleines Problem beim auslesen eines XML-Dokuments. Mein XML-Document sieht in etwa wie folgt aus: <ITEMS> <ITEM_000> <APPLICATION_NAME>blub</APPLICATION_NAME> <VERSION>1.0</VERSION> </ITEM_000> <ITEM_001> <APPLICATION_NAME>blabla</APPLICATION_NAME> <VERSION>4.X</VERSION> </ITEM_001> <ITEM... ... ... </ITEMS> Das gesamte xml-Dokument wurde automatisch erstellt. Ich will jetzt alles auslesen und dann in eine Liste mit Dictionaries speichern. Ich habs grad mal mit dem XmlTextReader versucht, aber der wirft mir bei folgendem codeblock ne exception. Is nur ein kleiner Test List<Dictionary<string, string>> list = new List<Dictionary<string, string>>(); XmlTextReader reader = new XmlTextReader(path); reader.ReadStartElement("ITEMS"); for(int i = 0; i < 150; i++) { reader.ReadStartElement("ITEM_" + i.ToString("#000")); string str = reader.ReadElementString("APPLICATION_NAME"); reader.ReadEndElement(); * } reader.ReadEndElement(); reader.Close(); Bei dem * bekomme ich eine Exception, die da lautet: 'Element' ist ein ungültiger XmlNodeType. Zeile 1, Position 66. Woran liegt dieser Fehler??? Bzw. kennt jemand nen besseren weg ein Xml-Dokument mit einer unbestimmten anzahl an knoten auszulesen? Die 150 in der forschleife sind einfach mal von mir vorgegeben, aber soviel elemente sind nicht in dem xml... Zitieren
Rekon1602 Geschrieben 26. April 2010 Autor Geschrieben 26. April 2010 Habs grad selbst rausgefunden wie es richtig funktioniert Für interessenten XmlDocument doc = new XmlDocument(); doc.Load(path); XmlElement root = doc.DocumentElement; foreach(XmlNode node in root.ChildNodes) { //Lesen der einzelnen Nodes node.SelectSingleNode("APPLICATION_NAME").InnerText.ToString(); } Zitieren
Argbeil Geschrieben 26. April 2010 Geschrieben 26. April 2010 (bearbeitet) Bei .NET ab Version 3.0 kannst du auch Linq2Xml verwenden um das "Xml Dokument" zu durchsuchen und dein Dictionary zu befüllen. Das laden kannst du über var xElement = XElement.Load(xmlDateiname); realisieren. Darauf kannst du dann ganz normale Linq Operationen durchführen. var applications = from item in xElement.Elements() select item.Element("APPLICATION_NAME").Value; Anstelle des select item .. kannst du an der Stelle auch sowas wie select new DictionaryItem(item.Element("APPLICATION_NAME").Value, ... ); verwenden um direkt an dieser Stelle das Dictionary aufzubauen. (Code ohne Gewähr und aus dem Kopf, aber das Prinzip sollte klar sein. Sonst einfach nach Linq2Xml suchen) Nebenbei ist das kein sehr schönes Xml Dokument weil die sich änderne Item-Nummber nicht als Attribut oder InnerText hinterlegt ist und so nicht bequem validiert oder ausgelesen werden kann. Bearbeitet 26. April 2010 von Argbeil Zitieren
mKipke Geschrieben 29. April 2010 Geschrieben 29. April 2010 Mal Unabhängig von der Lösung: Versuche mal, wenn möglich die Struktur deiner ein bischen anzupassen. Konstrukte wie <item01> .... </item01> . . . <item_n> ... </item_n> solltest du vermeiden. Dateninhalte haben nichts in der Datenstruktur verloren. Verwende stattdessen Attribute, also z.B. <item position="1"... Zitieren
Rekon1602 Geschrieben 4. Mai 2010 Autor Geschrieben 4. Mai 2010 Danke für den Tip mit den Attributen. Hab ich gemacht Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.