2 XML Dateien vergleichen und Unterschiede anpassen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Don_Batisto.

    2 XML Dateien vergleichen und Unterschiede anpassen

    Ich habe 2 XML-Dateien, die ich mit einander vergleiche und wenn etwas in der 1. Datei steht,aber nicht in der 2., dann wird dies in der 2. Datei angepasst.
    Dh. Unterschiede werden behoben.

    Bsp. Datei 1:

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-16" standalone="yes"?>
    2. <cabinet internal="Schrank1">
    3. <object internal="Register1">
    4. <flags inf1="Standort" inf2="Fundort"/>
    5. </object>
    6. <cabinet>



    Bsp. Datei 2:

    XML-Quellcode

    1. <?xml version="1.0" encoding="UTF-16" standalone="yes"?>
    2. <cabinet internal="Schrank1">
    3. <object internal="Register1">
    4. <flags inf1="Name" inf2="Nummer"/>
    5. </object>
    6. <cabinet>


    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    In Datei 2 sind nun zB. die beiden Attribute "inf1" und "inf2" anders.
    Diese sollen ersetzt werden durch die Attribute aus Datei 1.

    Das raussuchen und anpassen mache ich so:

    VB.NET-Quellcode

    1. Dim new_attribut As XmlNode = new_object.SelectSingleNode("flags")
    2. Dim old_attribut As XmlNode = old_object.SelectSingleNode("flags")
    3. Dim Same_Attribut As Boolean = XmlNode.Equals(new_attribut , new_object)
    4. If Same_Attribut <> True Then
    5. new_attribut = OldXmlDoc.ImportNode(new_attribut , True)
    6. old_object.ReplaceChild(new_attribut , old_attribut )
    7. End If


    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Anschließend speicher ich das XmlDokument wieder in die Datei:

    VB.NET-Quellcode

    1. OldXmlDoc.Save(DataiPfad)



    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Nun kommen wir zu dem Problem:

    Das Raussuchen, Ändern und Speichern funktioniert prima.
    Alles wird so angepasst wie es passieren soll.
    Jedoch erhalte ich dann, wenn ich die XML im Notepad++ via Erweiterungen/XML Tools auf ihre Syntax überprüfen will, folgende Meldung:



    Wie kann das sein? Beide Dateien haben am Anfang die UTF-16 Kennung... Diese brauche wird auch für die spätere Verarbeitung der XML benötigt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Don_Batisto“ ()

    Im Header hast du UTF16 angegeben, heißt aber nicht, dass das Dateiformat auch UTF16 hat. Du musst beim Initialisieren des XML Dokuments das richtige Encoding angeben.

    Da nicht angegeben hast wie die Dateien öffnest muss ich mutmasen und dir z.B. so eine Lösung zeigen

    VB.NET-Quellcode

    1. Dim XMLobj As Xml.XmlTextWriter = New Xml.XmlTextWriter("deineXML.xml", Encoding.UTF16)
    Ich öffne die Dateien so:

    VB.NET-Quellcode

    1. NewXmlDoc.Load(NeueDatei-Pfad)
    2. OldXmlDoc.Load(AlteDatei-Pfad)


    Das ist dann immer ein Xml.XmlDocument.
    Für das von dir vorgeschlagene Xml.XmlTextWriter müsste ich alle Funktionen umstellen und das ist eigentlich nicht mein Wunsch...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Don_Batisto“ ()

    ich glaub, genau eine Zeile müssteste hinzufügen, in der nämlich der xmlTextwriter erstellt wird

    Und dann die Zeile ändern, die das Xml speichert.

    Vlt. nichtmal das - also ich wundere mich eiglich, dass XmlDocument sich nicht mit dem richtigen Encoding abspeichern sollte - u.U. machsteda iwas unangebrachtes.
    Also, hab nu mal ein paar Tests gemacht...

    Die XML-Datei, die bearbeitet wird, ist bereits vorher mit dem Fehler versehen: Oben steht auch UTF-16 aber der Content ist UTF-8.

    Ursprünglich dachte ich, dass dies der Grund dafür ist, dass ich die XML nach der Bearbeitung nicht mehr nutzen kann.
    Dies sieht aber danach aus als liegt es nicht an der Codierung!

    Daher hat sich das hier mehr oder weniger erledigt...

    @Dodo: Mit deinem letzten Tip konnte ich die Content Codierung auf UTF-16 stellen! Danke