Typischerwiese wird der XMLTextWriter verwendet um XML Daten zu schreiben ohne auf das monströse DOM zurückgreifen zu müssen. EIne schnelle und einfache Methode!
Der XMLWriter kann dabei in einen Stream oder in ein File schreiben. In unserem Sample wird die
Datei Poll.XML beschrieben, die vom Vote Control benötigt wird. In dieser Datei steht die Frage für das Vote Controll mit den möglichen Antworten.
Beim Anlegen der Instanz des XMLtextWriters, kann auch das Encoding mit angegeben werden. In diesem Fall einfach mit per nothing von uns ingnoriert.
Dim Wr As XmlTextWriter = New XmlTextWriter(Server.MapPath("../poll.xml"), Nothing) |
Etwas aufwendiger wird das Erzeugen der einzelnen Nodes. Man benötigt dafür relativ viel aber unkomplizierten Code.
Zunächst einmal das File, das erzeugt werden soll.
<?xml version="1.0" encoding="utf-8" ?> <Poll name="Wichtig" connectionAppSettingKey="DBCon" > <Question>Wieviel Seiten drucken Sie monatlich</Question> <Choices> <a>weniger als 100</a> <b>zwischen 100 und 1000</b> <c>Mind. 1000</c> <d>weiss ich nicht</d> </Choices> </Poll> |
Zuerst wird einmal die XML Deklaration (erste Zeile geschrieben). Das wird durch WriteStartDocument erledigt. Das Attribut Encoding wird aus der initialisierung des XMLWriters genommen
Dim Wr As XmlTextWriter = New XmlTextWriter("c:poll1.xml", System.Text.UTF8Encoding.UTF8) Wr.WriteStartDocument() |
Dann erzeugen wir das Root Element und fügen zwei Attribute ein.
Wr.WriteStartElement("Poll") Wr.WriteAttributeString("name", txtPoll.Text) Wr.WriteAttributeString("connectionAppSettingKey", "DBCon") |
Ein Element ohne Unterlemenet wird direkt über WriteElementString und den Wert angelegt und auch gleich wieder geschlossen.
Wr.WriteElementString("Question", txtFrage.Text) |
Ein Element das weitere Elemente enthält wird über StartElement erzeugt. Darunter werden die Unterelemente angelegt die die Listeneinträge halten.
Wr.WriteStartElement("Choices") Dim i As Integer For i = 0 To lstOption.Items.Count - 1 Wr.WriteElementString(Chr(97 + i), lstOption.Items(i).Text) Next |
Um die Hirarchie zu schliessen wird WriteEndElement aufgerufen. Dies ist vergleichbar mit dem Next in einer verschachtelten For Next Schleife. Damit werden die schliessenden Elementeinträge erzeugt.
Wr.WriteEndElement() Wr.WriteEndElement() |
Ganz am Schluss muss das Root Element noch geschlossen und die Änderung per Flush ins File geschrieben werden. Zum sauberne Stil gehört es noch den Writer mit close zu beenden.
Wr.WriteEndDocument() Wr.Flush() Wr.Close() |
Eventuell stossen Sie auf eine Fehlermeldung, das die nötigen Rechte fehlen. Dann muss dem ASPNET Account ein Schreibrecht auf die XML Datei eingeräumt werden.