Laden...

XMLAttribut um eine Zahl subtrahieren

Erstellt von Mone vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.051 Views
M
Mone Themenstarter:in
9 Beiträge seit 2012
vor 10 Jahren
XMLAttribut um eine Zahl subtrahieren

Hallo ihr Lieben,

ich hoffe ich bin hier im richtigen Bereich gelandet... kurz zur Thematik: ist frage meinen Web Service an, dass er ein bestimmtes Attribut aus meinem XML-Dokument um eine Zahl verringern soll. Szenario: Ich sende einen string (ID) an meinen Webservice, sagen wir ich habe etwas aus dem Lager geholt, mit der Bitte das Produkt nun aus dem Lager zu reduzieren.


if (keks[i].Attributes["ID"].Value.Equals(code))
                    {
                        int menge = Convert.ToInt32((keks[i].Attributes.GetNamedItem("Menge"));
                        WriteLog(menge.ToString());
                        int reservierung = Convert.ToInt32(keks[i].Attributes.GetNamedItem("Reservierung"));
                        WriteLog(reservierung.ToString());
                        if (menge > reservierung)
                        {
                            XmlElement Elem = (XmlElement)keks[i];
                            WriteLog("Step1");
                            Elem.SetAttribute("Menge", (menge - 1).ToString());
                            WriteLog("keks");
                        }

Ich erhalte direkt nach meiner Bedingung folgenden Fehler:
Das Objekt des Typs "System.Xml.XmlAttribute" kann nicht in Typ "System.IConvertible" umgewandelt werden.
bei System.Convert.ToInt32(Object value)

Ja... ich kann lesen was da steht =) aber ich hab schon einiges versucht und ich befürchte, dass ich den Wald vor lauter Bäumen nicht mehr sehe.

Wäre prima, wenn mir jemand sagen könnte, was ich da verbocke...

LG

849 Beiträge seit 2006
vor 10 Jahren

Nen verdammt grosser Wald 😃

GetNamedValue gibt dir in diesem Fall ein XmlAttribute zurück. Dieses kann man nicht einfach in ein Int convertieren. Du musst erst den Value aus dem Attribute holen, und den dann in int convertieren.

LG

M
Mone Themenstarter:in
9 Beiträge seit 2012
vor 10 Jahren

Ähm... jap... der Wald buddelt mich glaub grad ein...

Jetzt kommt wohl die ultimativ blöde Frage überhaupt...

Du musst erst den Value aus dem Attribute holen

Was genau meinst du? Bin mir nicht sicher ob mein Quellcode so hinkommt, mit dem was du meinst...
Aber danke noch für deinen Hinweis 😁 👍

Vielleicht sollte ich es einfach mal mit schlafen versuchen... aber der Wille und Termindruck lässt das grad nicht so zu 😉

Ich hab das jetzt mal so gelöst...


XmlNode menge = newdoc.ChildNodes[1].SelectSingleNode("Keks");
                        var m = Convert.ToInt32(menge.SelectSingleNode("Menge"));
                        XmlNode reservierung = newdoc.ChildNodes[1].SelectSingleNode("Keks");
                        var r = Convert.ToInt32(reservierung.SelectSingleNode("Reservierung"));

Zumindest ist mein Zugriff nun erfolgreich... Jedoch sind nach meinem Log beide Attribute 0. Und das ist nicht korrekt...

C
2.122 Beiträge seit 2010
vor 10 Jahren

Der Code in deinem zweiten Beitrag hat ja nur sehr entfernt mit dem ersten zu tun?
Was gemeint war: Du kannst nicht das Attribut (-objekt) an sich konvertieren, sondern keks_.Attributes.GetNamedItem("Menge").Value

Mit SelectSingleNode auf ein Attribut zugreifen?

Jedoch sind nach meinem Log beide Attribute 0. Und das ist nicht korrekt...

Debuggen und nachsehen was in deinen Werten steht.
Ich würde die der Übersichtlichkeit halber mit int menge deklarieren statt mit var m.

M
Mone Themenstarter:in
9 Beiträge seit 2012
vor 10 Jahren

Vielen Dank für den Hinweis 😁

Geistige Umnachtung lässt grüßen.... 🤔

Ich werde es gleich nochmal ausprobieren.

Bevor ich es vergesse: Danke euch beiden für die Hilfe 😁
Es klappt.
Ab und an sollte man auch mal von der Leitung runter wo man drauf steht 😉