XmlTextWriter



  • Hi zusammen kann mir mal einer sagen wie ich am besten vorgehe, wenn ich ein XML aufbauen will?? Ich muss zugeben ich bin absoluter XML-Noob, ich hab einen XmlTextwriter angelegt, und jetzt wollte ich da mal meine Infos rein schreiben wenn ich aber z.B. folgendes versuche

    XmlTextWriter writer = new XmlTextWriter("../bin/Fehlerkategorien.xml", null);
                writer.WriteStartDocument();
                writer.WriteStartAttribute("Kategorie");//hier
                writer.WriteAttributeString("Kategorie", tBCategory.Text);
                writer.WriteEndAttribute();
    

    dann fliegt er da wo //hier steht. Exception:Token StartAttribute im Status Prolog würde in einem ungültigen XML-Dokument resultieren

    was muss ich wann starten und wann enden!
    Ich will verschiedene Fehlerkategorien speichern und darunter dann die jeweiligen Eigenschaften.

    Vielen Dank schon im Voraus



  • Ein Attribut muß immer einem Element zugeordnet sein.

    Encoding encoding = new UTF8Encoding();
    
    XmlTextWriter xml = new XmlTextWriter(sFilename, encoding);
    
    xml.Formatting = Formatting.Indented;
    
    xml.WriteStartDocument();
    
      xml.WriteStartElement("Element");
    
        xml.WriteAttributeString("Attribut", "Attributwert");
    
      xml.WriteEndElement();
    
    xml.WriteEndDocument();
    
    xml.Close();
    

    Die XML-Datei sieht nun so aus:

    <?xml version="1.0" encoding="utf-8"?>
    <Element Attribut="Attributwert>/>
    

    Um weitere Elemente einzufügen, einfach WriteStartElement/WriteEndElement verschachteln...

    WriteStartAttribute/WriteEndAttribute brauchst du nur bei komplexeren Attributlisten verwenden (als Anfänger eher nicht...)



  • Super vielen Dank!

    Frage an die Mods wäre das nichts für die FAQs?



  • darf ich der Vollständigkeithalber aber dennoch fragen was writeStartAttribute und ..End.. genau bedeutet?



  • öhm noch ein Beitrag von mir 🙄
    Wenn ich was einem XML file hinzufügen möchte, muss ich es erst in nen Reader einlesen und dem dann das vom writer hinzufügen und dann auf den Textwriter

    oder kann ich mit dem Textwriter auch direkt adden???



  • Polofreak schrieb:

    darf ich der Vollständigkeithalber aber dennoch fragen was writeStartAttribute und ..End.. genau bedeutet?

    Was hälst du davon einfach mal MSDN zu lesen und n bisschen rumzuprobieren? S gibt (hab ich mal vor langer Zeit gehört :D) echt noch Menschen, die Probleme so lösen 😉

    Greetz ^^



  • Hi zusammen, ja Manuel hat recht, so hätte ich mir auch keine Antwort gegeben (aber es war ja auch Freitag mittag 😉 )

    So nachdem ich ne ganze Weile recherchiert habe, hab ich jetzt viel konkretere Fragen.

    Also ich mach:

    if (File.Exists(sFilename))
                {
                    read = XmlReader.Create(sFilename);
                    // hier müsste ich es nem Writer hinzufügen aber wie?
                }
    

    Ist denn die Vorgehensweise richtig? Ich mein es gibt ja x-Möglichkeiten ein XML-Dokument zu schreiben. Ist es nötig ein XmlDocument-Objekt anzulegen oder muss ich das ganze Binär einlesen um es dann wieder binär in der Writer zu schreiben oder geht es vom Prinzip her schon so wie oben? Wie bekomme ich aber dann meinen eingelesenen Stream in meinen Writer?



  • Mal ne kurze Zwischenfrage, da ich mir mal denke, dass es den anderen auch wie mir geht ... wir wissen einfach nicht, was du genau machen möchtest 😉

    Beabsichtigst du eine komplett neue Datei zu schreiben (denk ich mir mal)
    oder eine xml-Datei einzulesen und diese zu ergänzen?

    Greetz



  • Also ich weiß jetzt nicht ob das die Ideale Lösung ist, aber ich hab es jetzt doch mit einem XmlDocument Objekt gemacht!
    Und zwar so:

    if (File.Exists(sFilename))
                {
                    // dann laden
                    doc.Load(sFilename);
                }
                else
                {
                    // ansonsten Versions- und Stammknoten anlegen
                    node = doc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
                    doc.AppendChild(node);
                    node = doc.CreateElement("Fehlerkategorien");
                    doc.AppendChild(node);
                }
                // Stammknoten zuweisen
                parentNode = doc.DocumentElement;
    
                // Knoten der Kategorie einfügen
                node = doc.CreateElement("Kategorie");
                node.Attributes.Append(doc.CreateAttribute("Typ"));
                node.Attributes["Typ"].InnerText = tBCategory.Text;
                doc.DocumentElement.AppendChild(node);
    
                // Kommentar der Kategorie einfügen
                node = doc.CreateComment(tBdescription.Text);
                doc.DocumentElement.AppendChild(node);
    
                // suche den Knoten
                parentNode = doc.SelectSingleNode("./Fehlerkategorien/Kategorie[@Typ='"+tBCategory.Text+"']");
                if (parentNode != null)
                {
                    node = doc.CreateElement("AOI-Abdeckung");
                    node.InnerText = MtbAoi.Text;
                    parentNode.AppendChild(node);
                }
                doc.Save(sFilename);
    

    einfach einem XML einen Knoten hinzufügen, bzw. Knoten + Unterknoten 😉


Anmelden zum Antworten