Hallo,
Der Fehler ist mir zwar sehr sehr sehr peinlich, aber ich weiß wirklich nicht woher der kommen soll:
Ich habe ein XML-Dokument, oder besser eine XmlNode von der ich ein Attribut auslesen möchte, was aber fehlschlägt. Es kommt immer eine "Object not set to a Reference"-Exception.
Das ist mein Code zum auslesen:
try
{
//Ein bisschen Quelltext
this.Values = new Hashtable();
this.cdoc = new XmlDocument();
this.cdoc.Load(Path + "\\config.xml");
XmlNodeList nodes = this.cdoc.GetElementsByTagName("data");
for(int i = 0; i < nodes.Count; i++)
{
//Hier laufe ich gleich in die Exception bei nodes[i].Attributes["key"].InnerText
this.Values.Add(nodes[i].Attributes["key"].InnerText, nodes[i].InnerText);
}
}
catch(Exception err)
{
//Fehler wird hier von mir behandelt(d.h. protokolliert)
}
Und da ist das zugehörige XML:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<value key="test" description="Das hier ist ein Testschlüssel">Testwert</value>
</data>
Scheinbar bin ich zu dumm....
Weiß jemand woher das kommen sollte?
Besuchen sie das VisualC++ - Forum
So wie ich das sehe willst du die Values in der ebene Data auslesen
das geht folgendermasen:
[B]XmlNodeList nodes = cdoc.SelectNodes(@"/data/value");[/B]
for(int i = 0; i < nodes.Count; i++)
{
//Hier laufe ich gleich in die Exception bei nodes[i].Attributes["key"].InnerText
this.Values.Add(nodes[i].Attributes["key"].InnerText, nodes[i].InnerText);
}
einfach mal anschauen und debuggen dann kommst du von selber drauf 🙂
gruß Horego
So findet er nichtmal Nodes........
Original von Horego
einfach mal anschauen und debuggen dann kommst du von selber drauf 🙂
gruß Horego
Eben nicht...Der Debugger meint, es gäbe keine Items in der Attribute-Collection.....
Besuchen sie das VisualC++ - Forum
Also ich hab es getestet bei mir geht es!
XMLDatei auch im UTF8 Format ??
Bei dir ist es klar das es nicht geht aus dem einfachen grunde
Die liest die XMLNodes data aus, die aber keine attribute besitzen, du musst noch eine Ebene tiefer!
XmlNodeList nodes = this.cdoc.GetElementsByTagName("data");
Hier der Fehler! Das element Data hat kein Attribut 'key'
this.Values.Add(nodes[i].Attributes["key"].InnerText, nodes[i].InnerText);
1x Tiefer Bitte!
foreach(XmlNode richtigeNode in nodes[i].ChildNodes)
this.Values.Add(richtigeNode.Attributes["key"].InnerText, richtigeNode.InnerText);
So das wars auch schon meine Funktion geht halt über den XPath ausdruck gleich in Ebene 2 mehr is das nicht
gruß Horego
Also ich hab dir das jetzt mal geschrieben...
Funktion:
private void NurFuerDich()
{
//Deine Hashtable
Hashtable values = new Hashtable();
//Dein XMLDoc
XmlDocument doc = new XmlDocument();
//XMLDatei laden...
doc.Load(@"c:\config.xml");
//Alle Value Nodes in Data auslesen
XmlNodeList valueNodes = doc.SelectNodes("/data/value");
//Alle Nodes durchgehen
foreach(XmlNode valueNode in valueNodes)
//In Hashtable aufnehmen
values.Add(valueNode.Attributes["key"].InnerText, valueNode.InnerText);
}
XML-File:
<?xml version="1.0" encoding="utf-8" ?>
<data>
<value key="test" description="Das hier ist ein Testschlssel">Testwert</value>
<value key="tes2t" description="Das hier ist ein Testschlssel22222">Testwer2t</value>
</data>
Dieser Code geht 100%, der obrige auch, denn das is im grunde der gleiche..
Deine XML-Datei darf natürlich nicht so aussehen...
<data>
<value key="test" description="Das hier ist ein Testschlssel">Testwert</value>
</data>
<data>
<value key="tes2t" description="Das estschlssel22222">Testwer2t</value>
</data>
... denn du brauchst immer ein Root-Element
Ok vielen Dank für deine schnelle Hilfe! Ich hätte da noch ewig dran gesucht und vielleicht dieses XML rausgehauen und durch eine Textdatei ersetzt...... 😁
Besuchen sie das VisualC++ - Forum