Laden...

Attribute existieren angeblich nicht

Erstellt von Franknstein vor 19 Jahren Letzter Beitrag vor 19 Jahren 6.238 Views
F
Franknstein Themenstarter:in
529 Beiträge seit 2003
vor 19 Jahren
Attribute existieren angeblich nicht

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

42 Beiträge seit 2004
vor 19 Jahren

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

F
Franknstein Themenstarter:in
529 Beiträge seit 2003
vor 19 Jahren

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

42 Beiträge seit 2004
vor 19 Jahren

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

  1. Ebene Data
  2. Ebene Value

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

F
Franknstein Themenstarter:in
529 Beiträge seit 2003
vor 19 Jahren

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