foreach loop doesn't work with a XM Lfile

+1 azzeddine elouadi · September 24, 2014
2014-09-24
Hi !
My Problem is : a foreach loop doesn't work .. hope You can Help 
it works on the First Element Only
in the image You can see the xml file
/images/forum/upload/2014-09-24/1d0cf125c60e802bcf9b7bef1ec9b4b3.PNG
=======
here is the foreach loop
----
string xmlstring = "C:\\Users\\Azzeddine\\Desktop\\Lehlou\\Lehlou\\bin\\Debug\\Produit.xml";
XmlDocument xml = new XmlDocument();
xml.Load(xmlstring);
XmlNodeList xnList = xml.SelectNodes("/Produit/Produit");
foreach (XmlNode xn in xnList)
{
string nom_produit = xn["Nom_Produit"].InnerText;
int Quantite = int.Parse(xn["Quantite"].InnerText);
if ( nom_produit == Designation_comboBox.Text){
Quantite = int.Parse(Quantite_enstock_comboBox.Text) - int.Parse(Quantite_textBox.Text);
xml.SelectSingleNode("Produit/Produit/Quantite").InnerText = Quantite.ToString();
xml.Save(xmlstring);
}

================= 
itried this too .. but it does the same :
-----------
XmlDocument docx = new XmlDocument();
                    docx.Load("C:\\Users\\Azzeddine\\Desktop\\Lehlou\\Lehlou\\bin\\Debug\\Produit.xml");
                    foreach (XmlNode xNode in docx.SelectNodes("/Produit/Produit"))
                    {
                        if (xNode.SelectSingleNode("Nom_Produit").InnerText == Designation_comboBox.Text)
                        {
                            docx.SelectSingleNode("/Produit/Produit/Quantite").InnerText =
                                (int.Parse(docx.SelectSingleNode("/Produit/Produit/Quantite").InnerText) - int.Parse(Quantite_textBox.Text)).ToString();
                        }
                    }
                    docx.Save("C:\\Users\\Azzeddine\\Desktop\\Lehlou\\Lehlou\\bin\\Debug\\Produit.xml");
=====================
SORRY FOR MY ENGLISH  :D 
Best Regards
                        

Post a Reply

Replies

Oldest  Newest  Rating
+1 Eugene Botma · September 25, 2014
I don't know what the rest of the code looks like, but the foreach loop part is fine in both parts of the code, the problem rather is this line:

xml.SelectSingleNode("Produit/Produit/Quantite").InnerText = Quantite.ToString();
//or in the second attempt:
docx.SelectSingleNode("/Produit/Produit/Quantite").InnerText =(int.Parse(docx.SelectSingleNode("/Produit/Produit/Quantite").InnerText) - int.Parse(Quantite_textBox.Text)).ToString();


This line causes an exception to be thrown. specifically: "Object reference not set to an instance of an object."

So if the code you posted is in a try catch statement, you wouldn't notice that the exception is thrown and it would look like only the first one works.

Try commenting out these lines(and the xml.Save one for the first attempt) and test the loop again, it should then run through all of the xml nodes without a problem.
0 azzeddine elouadi · September 25, 2014
Yes right ! then I resolved the problem .. i shoud write : 

string xmlstring  = "C:\\Users\\Azzeddine\\Desktop\\Lehlou\\Lehlou\\bin\\Debug\\Produit.xml";
                    XmlDocument xml = new XmlDocument();
                    xml.Load(xmlstring);
                    XmlNodeList xnList = xml.SelectNodes("Produit/Produit");
                    foreach (XmlNode xn in xnList)
                    {
                        string nom_produit = xn["Nom_Produit"].InnerText;
                        int Quantite1 = int.Parse(xn["Quantite"].InnerText);
                        if ( nom_produit ==  Designation_comboBox.Text){
                            Quantite1 = int.Parse(Quantite_enstock_comboBox.Text) - int.Parse(Quantite_textBox.Text);
                            xn["Quantite"].InnerText = Quantite1.ToString();
                            break;
                        }
                    }
                    xml.Save(xmlstring);
                        ____________
Nom it works :) 
thanks For Helping
0 azzeddine elouadi · September 25, 2014
You Are right 
now it works with this : 
string xmlstring  = "C:\\Users\\Azzeddine\\Desktop\\Lehlou\\Lehlou\\bin\\Debug\\Produit.xml";
                    XmlDocument xml = new XmlDocument();
                    xml.Load(xmlstring);
                    XmlNodeList xnList = xml.SelectNodes("Produit/Produit");
                    foreach (XmlNode xn in xnList)
                    {
                        string nom_produit = xn["Nom_Produit"].InnerText;
                        int Quantite1 = int.Parse(xn["Quantite"].InnerText);
                        if ( nom_produit ==  Designation_comboBox.Text){
                            Quantite1 = int.Parse(Quantite_enstock_comboBox.Text) - int.Parse(Quantite_textBox.Text);
                            xn["Quantite"].InnerText = Quantite1.ToString();
                            break;
                        }
                    }
                    xml.Save(xmlstring);
                        _________ 
I really appreciate Your help
  • 1

C#

107,108 followers
About

C# is an object-oriented language designed for improving the development of web applications.

Links
Moderators