XML ändern/schreiben/bearbeiten

Polli

Mitglied
Hallo ihr Lieben,

ich hab da mal eine Frage, vielleicht könnt ihr mir ja helfen.
Mit meinem geschriebenen Programm kann ich ohne Probleme eine XML-Datei auslesen und erstellen die dann beschrieben wird, außerdem kann ich die bestehende Datei auch ohne Probleme verändern, aber NUR wenn der Knoten existiert.

Die Struktur der XML ist in etwa so:
Code:
<test_db pfad="c:\datenbank\test" update_db="\\Dbprod\updates\test">
    <update tag="mo" von="7:00" bis="9:00" />
    <update tag="di" von="7:00" bis="9:00" />
    <update tag="mi" von="7:00" bis="9:00" />
    <update tag="do" von="7:00" bis="9:00" />
    <update tag="fr" von="7:00" bis="9:00" />
    <update tag="sa" von="7:00" bis="9:00" />
    <update tag="so" von="7:00" bis="9:00" />
</text_db>

Wie gesagt auslesen und verändern bekomme ich hin.
Jetzt kommt das Problem:
Falls in der XML z.B. der "mo" nicht existiert, soll er erstellt werden, doch leider bekomme ich das nicht hin.
Ich habe es mit der selben Struktur wie beim erstellen probiert, doch leider klappt es nicht.
Habt ihr eine Idee?


Ich poste euch einfach mal die Methode die sich um den Abschnitt der XML kümmert..

Code:
public void tagAendern(XmlNode date, XmlDocument doc, bool valueB, String tag, CheckBox checkBox)
{
    XmlNode myNode;
    XmlAttribute myAttribute;
    if (@date.Name.Equals("update"))
    {
        if (valueB == false)
        {
            if (@date.Attributes["tag"].InnerText.Equals(tag))
            {
                if (checkBox.Checked == true)
                {
                    @date.Attributes["tag"].InnerText = tag;
                    @date.Attributes["von"].InnerText = st_h_box.Text + ":" + st_min_box.Text;
                    @date.Attributes["bis"].InnerText = en_h_box.Text + ":" + en_min_box.Text;
                    valueB = true;
                    MessageBox.Show(tag + " existiert");
                }
                else if (checkBox.Checked == false)
                {
                    if (@date.Attributes["tag"].InnerText.Equals(tag))
                    {
                        @date.Attributes["tag"].InnerText = tag;
                        @date.Attributes["von"].InnerText = "0:00";
                        @date.Attributes["bis"].InnerText = "0:00";
                        valueB = true;
                    }
                }
            }
            else if (!@date.Attributes["tag"].InnerText.Equals(tag))
            {
                if (checkBox.Checked == true)
                {
                    myNode = doc.CreateElement("update");

                    myAttribute = doc.CreateAttribute("tag");
                    myAttribute.InnerText = tag;
                    myNode.Attributes.Append(myAttribute);

                    myAttribute = doc.CreateAttribute("von");
                    myAttribute.InnerText = st_h_box.Text + ":" + st_min_box.Text;
                    myNode.Attributes.Append(myAttribute);

                    myAttribute = doc.CreateAttribute("bis");
                    myAttribute.InnerText = en_h_box.Text + ":" + en_min_box.Text;
                    myNode.Attributes.Append(myAttribute);

                    valueB = true;
                }
                else if (checkBox.Checked == false)
                {
                        myNode = doc.CreateElement("update");

                        myAttribute = doc.CreateAttribute("tag");
                        myAttribute.InnerText = tag;
                        myNode.Attributes.Append(myAttribute);

                        myAttribute = doc.CreateAttribute("von");
                        myAttribute.InnerText = "0:00";
                        myNode.Attributes.Append(myAttribute);

                        myAttribute = doc.CreateAttribute("bis");
                        myAttribute.InnerText = "0:00";
                        myNode.Attributes.Append(myAttribute);

                        valueB = true;
                }  
            }
        }
    }
}

Und vielleicht auch gar nicht so uninteressant wo und wie die Methode aufgerufen wird.
Code:
if (@daten.Name.Equals("test_db"))
{
    if (pfadezuweisen_checkBox.Checked == true)
    {
        @daten.Attributes["pfad"].InnerText = allePfadeBox.Text + "\\test";
    }
    else if (pfadezuweisen_checkBox.Checked == false)
    {
        @daten.Attributes["pfad"].InnerText = testPfadBox.Text;
    }
    @daten.Attributes["update_db"].InnerText = testUpdate_textBox.Text;
    foreach (XmlNode @date in @daten.ChildNodes)
    {
        tagAendern(@date, doc, false, "mo", montag_checkBox);
        tagAendern(@date, doc, false, "di", dienstag_checkBox);
        tagAendern(@date, doc, false, "mi", mittwoch_checkBox);
        tagAendern(@date, doc, false, "do", donnerstag_checkBox);
        tagAendern(@date, doc, false, "fr", freitag_checkBox);
        tagAendern(@date, doc, false, "sa", samstag_checkBox);
        tagAendern(@date, doc, false, "so", sonntag_checkBox);
    }
}
Danke schon mal im Voraus!!

Liebe Grüße
Polli.
 
Zuletzt bearbeitet:
Hi

Schau dir mal XPath an. Darüber kannst du Abfragen an Xml stellen und somit auch prüfen, ob es ein Tag mit einem bestimmten Attribut und Wert auch gibt.
WEnn das nicht der Fall ist, legst du es an
 

Neue Beiträge

Zurück