Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

c# xml auslesen

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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

}

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.