Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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...

Geschrieben

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();

}

Geschrieben (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 von Argbeil
Geschrieben

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"...

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...