Gast
2006-11-13, 13:45:06
Hi Leute,
ich habe mich mal etwas intensiver mit XML und der Programmierung von Anwendungen (in Visual Studio .NET), die auf XML-Dateien zugreifen, befaßt. Dabei habe ich mein Hauptaugenmerk besonders auf den System.Xml Namespace des .NET Frameworks gelegt. Soweit ich das verstanden habe, ist das so vorgesehen, daß man, wenn man eine XML-Datei editieren will (z.B. Elemente einfügen oder Element-Strings verändern), den kompletten Dateiinhalt mit Hilfe der Klasse XmlTextReader ausliest, in einer Instanz der XmlDocument-Klasse im Speicher ablegt, dort die gewünschten Manipulationen vornimmt (dafür gibt's Klassen wie XmlNode, XmlElement usw.), und dann über die XmlTextWriter-Klasse die XML-Datei mit dem geänderten Dateiinhalt aus der XmlDocument-Instanz überschreibt.
Jetzt frage ich mich: ist das nicht ein bißchen aufwändig? Man liest eine komplette Datei aus und überschreibt sie an schließend komplett, und das alles um eventuell nur ein einziges XML-Tag in der Datei zu ändern?
Man stelle sich eine XML-Datei vor, die folgendes Element enthält:
...
<Wurst>Salami</Wurst>
...
Wäre es nicht viel einfacher, einfach nur das gewünschte Element (hier: Wurst) auszulesen, den Element-String (Salami) umzuändern (Mortadella), und den Element-String in der Datei zu überschreiben?
So ähnlich wird es ja auch beim .ini-Dateiformat gemacht: es gibt eine Win32-Funktion WritePrivateProfileString(), die in einer Sektion zu einem Schlüssel einen Wert schreibt, und einen eventuell vorher bereits vorhandenen Wert überschreibt.
Das komplette Überschreiben des Dateiinhalts ist auch kritisch in der Hinsicht, daß wenn während der Schreibens etwas schief geht (z.B. das Programm abstürzt), der Dateiinhalt verlorengehen kann.
ich habe mich mal etwas intensiver mit XML und der Programmierung von Anwendungen (in Visual Studio .NET), die auf XML-Dateien zugreifen, befaßt. Dabei habe ich mein Hauptaugenmerk besonders auf den System.Xml Namespace des .NET Frameworks gelegt. Soweit ich das verstanden habe, ist das so vorgesehen, daß man, wenn man eine XML-Datei editieren will (z.B. Elemente einfügen oder Element-Strings verändern), den kompletten Dateiinhalt mit Hilfe der Klasse XmlTextReader ausliest, in einer Instanz der XmlDocument-Klasse im Speicher ablegt, dort die gewünschten Manipulationen vornimmt (dafür gibt's Klassen wie XmlNode, XmlElement usw.), und dann über die XmlTextWriter-Klasse die XML-Datei mit dem geänderten Dateiinhalt aus der XmlDocument-Instanz überschreibt.
Jetzt frage ich mich: ist das nicht ein bißchen aufwändig? Man liest eine komplette Datei aus und überschreibt sie an schließend komplett, und das alles um eventuell nur ein einziges XML-Tag in der Datei zu ändern?
Man stelle sich eine XML-Datei vor, die folgendes Element enthält:
...
<Wurst>Salami</Wurst>
...
Wäre es nicht viel einfacher, einfach nur das gewünschte Element (hier: Wurst) auszulesen, den Element-String (Salami) umzuändern (Mortadella), und den Element-String in der Datei zu überschreiben?
So ähnlich wird es ja auch beim .ini-Dateiformat gemacht: es gibt eine Win32-Funktion WritePrivateProfileString(), die in einer Sektion zu einem Schlüssel einen Wert schreibt, und einen eventuell vorher bereits vorhandenen Wert überschreibt.
Das komplette Überschreiben des Dateiinhalts ist auch kritisch in der Hinsicht, daß wenn während der Schreibens etwas schief geht (z.B. das Programm abstürzt), der Dateiinhalt verlorengehen kann.