Laden...

Einfache XML Datei lesen - Direkter Zugriff auf Unterknoten

Erstellt von Surrendert vor 18 Jahren Letzter Beitrag vor 17 Jahren 13.325 Views
S
Surrendert Themenstarter:in
3 Beiträge seit 2006
vor 18 Jahren
Einfache XML Datei lesen - Direkter Zugriff auf Unterknoten

Hi. Ich habe Probleme bei lesen der untstehenden XML Datei. Zunächst möchte ich einfach alle Knoten ausgeben und später bestimmte Knoten direkt ansprechen. Kann mir jemand ein parrTipps geben.

<Klausur>
<Klausurdaten>
<ProfName>Max Muster</ProfName>
<KlausurName>C#</KlausurName>
</Klausurdaten>

&lt;Noten&gt;  
	&lt;Student&gt;  
	&lt;Matrikelnummer&gt;12345&lt;/Matrikelnummer&gt;  
	&lt;Prozentpunkte&gt;90&lt;/Prozentpunkte&gt;  
	&lt;/Student&gt;  
	  
	&lt;Student&gt;  
	&lt;Matrikelnummer&gt;54321&lt;/Matrikelnummer&gt;  
	&lt;Prozentpunkte&gt;77&lt;/Prozentpunkte&gt;  
	&lt;/Student&gt;  
&lt;/Noten&gt;  

</Klausur>

XmlDocument doc = new XmlDocument();
doc.Load("noten.xml");

XmlElement root = doc.DocumentElement;

foreach(XmlNode i in root.ChildNodes)
{
Console.WriteLine(i["ProfName"].InnerText);
Console.WriteLine(i["KlausurName"].InnerText);

//Console.WriteLine(i["Matriklenummer"].InnerText);

//funktioniert so nicht - und wie könnte man beispielsweise
//die Anzahl der Studenten ermitteln (durchzählen)

}

thanks!!

476 Beiträge seit 2004
vor 18 Jahren
Knoten auslesen

hallo Surrendert,

wenn du deinen Code ausführst bekommt du eine Exception? Das liegt daran, dass der erste Childknoten von "i" (also "Klausurdaten") die Subknoten "ProfName" und "KlausurName" enthält, der zweite (also "Noten") aber nicht.

Möchtest du einzelne oder mehrere Knoten aus einem XML-Dokument auslesen, bieten sich die Methoden "SelectSingleNode" (für einzelne) oder "SelectSingleNodes" (für mehrere) an. Die Abfrage selbst wird über XPath gemacht.

Beispiel für einen einzelnen Knoten:

Console.WriteLine(root.SelectSingleNode("./Klausurdaten/ProfName").InnerText);

oder für eine Liste:



XmlNodeList nodes = root.SelectNodes("./Noten/Student");

foreach(XmlNode i in nodes)
	{
		Console.WriteLine(i["Matrikelnummer"].InnerText);
	}

ich hoffe ich konnte dir weiterhelfen,

-yellow

Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).

Mein Blog: Yellow's Blog auf sqlgut.de

P
554 Beiträge seit 2005
vor 18 Jahren

Achte ausserdem auf die Schreibweise von Martrikelnummer 🙂

Achtung! - Hinter dir ist ein dreiköpfiger Affe!

23 Beiträge seit 2005
vor 17 Jahren

Martrikelnummer?

Welche Sprache ist das? 😉