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 Textwriteroder 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