tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
457
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Polli Polli ist offline Mitglied Silber
    Registriert seit
    Dec 2007
    Beiträge
    88
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <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 :
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    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.
    Geändert von Polli (12.10.10 um 09:00 Uhr) Grund: aufrufen der Methode
     
    Jeder Moment ist eine neue Chance, nutze sie!!

    Wer lächelt statt zu toben, ist immer der Stärkere.

  2. #2
    Avatar von Nico Graichen
    Nico Graichen Nico Graichen ist offline aka gemballa
    tutorials.de Moderator
    Registriert seit
    Dec 2003
    Ort
    Pulheim (NRW)
    Beiträge
    3.898
    Blog-Einträge
    34
    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
     
    Grüße Nico
    ----------------------
    Xing
    ----------------------
    Zitat Zitat von Mark Twain (1835-1910)
    Es gibt drei Dinge, die eine Frau aus dem Nichts hervorzaubern kann: einen Hut, einen Salat und einen Ehekrach.
    Zitat Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
    The Difference Between God and Larry Ellison: God Doesn't Think He's Larry Ellison

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 04.06.09, 10:40
  2. Antworten: 1
    Letzter Beitrag: 28.06.07, 07:55
  3. Antworten: 10
    Letzter Beitrag: 19.03.05, 20:33
  4. Antworten: 2
    Letzter Beitrag: 26.12.04, 00:24
  5. in XML file schreiben/bearbeiten/speichern
    Von derDomal im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 10.02.04, 10:19

Stichworte