Manipuler des XML en c# avec un windows form
J'ai un code qui écrit dans un fichier XML:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
private void btnValider_Click(object sender, EventArgs e)
{
FileStream fichier = new FileStream("pieces.xml", FileMode.OpenOrCreate);
XmlTextWriter filexml = new XmlTextWriter(fichier, null);
if (!File.Exists("pieces.xml"))
{
filexml.WriteStartDocument();// = <?xml version="1.0" standalone="yes"?>
filexml.WriteWhitespace("\n");
filexml.WriteWhitespace("\t");
filexml.WriteStartElement("Pieces");// début d'un élément <pieces>
filexml.WriteWhitespace("\n");
filexml.WriteWhitespace("\t\t");
filexml.WriteStartElement("piece");
filexml.WriteWhitespace("\n\t\t\t");
filexml.WriteStartElement("Id");
filexml.WriteString("4");
filexml.WriteEndElement();
filexml.WriteWhitespace("\n\t\t\t");
filexml.WriteStartElement("Nom");
filexml.WriteString(txtNomPieceBasique.Text);
filexml.WriteEndElement();
filexml.WriteWhitespace("\n\t\t\t");
filexml.WriteStartElement("DureeProg");
filexml.WriteString(txtDureeProgrammation.Text);
filexml.WriteEndElement();
filexml.WriteWhitespace("\n\t\t\t");
filexml.WriteStartElement("DureeDecoup");
filexml.WriteString(txtDureeDecoupage.Text);
filexml.WriteEndElement();
filexml.WriteWhitespace("\n\t\t\t");
filexml.WriteEndElement(); // </piece>
filexml.WriteWhitespace("\n");
filexml.WriteEndElement(); //</Pieces>
filexml.Close();// ferme le fichier
} |
Qui me donne cet XML:
Code:
1 2 3 4 5 6 7 8
| <?xml version="1.0"?>
<Pieces>
<piece id="4">
<Nom>sdfsd</Nom>
<DureeProg>dsqd</DureeProg>
<DureeDecoup>sddfgdfg</DureeDecoup>
</piece>
</Pieces> |
Et j'aimerais que lorsqu'il trouve déja le fichier qu'il m'ajoute la nouvelle pièce au dessus de la balise </Pieces> de cette manière:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <?xml version="1.0"?>
<Pieces>
<piece id="4">
<Nom>sdfsd</Nom>
<DureeProg>dsqd</DureeProg>
<DureeDecoup>sddfgdfg</DureeDecoup>
</piece>
<piece id="5">
<Nom>aaaa</Nom>
<DureeProg>bbbb</DureeProg>
<DureeDecoup>ccc</DureeDecoup>
</piece>
</Pieces> |
Malheureusement je n'arrive pas à l'exécuter correctement dans le code de mon else:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| else
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("pieces.xml");
XmlNode root = doc.FirstChild;
XmlElement elem = doc.CreateElement("price");
elem.InnerText = "19.95";
doc.InsertAfter(elem,doc.LastChild);
lblsave.Visible = true;
lblsave.Text = "OK";
} |
Apparemment, il faut utiliser InsertBefore ou InsertAfter mais je ne vois pas comment parce que je ne sais pas par quoi remplacer les données que j'ai trouvé sur le net dans ce else.
Quelqu'un sait comment s'y prendre? quitte à ne pas utiliser InsertBefore et utiliser la manière de mon if?
Merci d'avance.