C# Projekt mit XMLspy



  • Ich habe mit dem XMLspy Version 10 ein C# Projekt erzeugt,
    um die jeweiligen xml-Dateien lesen und schreiben zu können.

    Beim Speichern werden jedoch alle Zeichen "0D-0A-09" entfernt.
    Laut XMLspy sind die gespeicherten Dateien jedoch weiterhin gültig.

    Benutze ich jedoch zum erneuten Laden die Funktion "LoadFromString(<string>)"
    wird ein Fehler ausgelöst. Wenn die Funktion "Load(<file>)" benutzt wird,
    dann kommt der Fehler nicht. Wenn ich "Load(<file>)" benutzen müsste,
    würde dies im Hauptprojekt einen erheblichen Mehraufwand bedeuten.

    Außerdem gibt es noch eine Merkwürdigkeit:

    Wenn ich zum Speichern "Save(<file>)" benutze, dann wird am Anfang
    der Datei "EF-BB-BF" eingetragen. Wenn ich "str = SaveToString()"
    benutze (und anschl. den String speicher) dann werden die Zeichen nicht eingetragen. 😕

    Kennt sich jemand mit SPYxml-Projekten aus?
    Bin für jede Hilfe dankbar.



  • csofti schrieb:

    Beim Speichern werden jedoch alle Zeichen "0D-0A-09" entfernt.

    google mal nach xml preserve whitespace

    csofti schrieb:

    Wenn ich zum Speichern "Save(<file>)" benutze, dann wird am Anfang der Datei "EF-BB-BF" eingetragen.

    http://de.wikipedia.org/wiki/Byte_Order_Mark



  • Vielen Dank für den Hinweis!

    Ich habe herausgefunden, das zum Speichern einer XML-Datei mit Zeilenumbrüchen und -einrückungen, sowie ohne Byte Order Mark (EF-BB-BF), das vom XMLspy erzeugte C# Wrapper Projekt angepasst werden muss.

    Hier die originale Funktion (AltovaXML -> Document.cs):

    public void Save(string filename, Node node)
    {
        XmlTextWriter writer = new XmlTextWriter(filename, encoding);
        Save(writer, node);
        writer.Close();
    }
    

    Folgende Änderungen müssen rein:

    public void Save(string filename, Node node)
    {
        XmlTextWriter writer = new XmlTextWriter(filename,
                                     new System.Text.UTF8Encoding(false));
        writer.Formatting = Formatting.Indented;
        writer.IndentChar = (char)09;
        writer.Indentation = 1;
        Save(writer, node);
        writer.Close();
    }
    

Anmelden zum Antworten