Laden...

[gelöst] XML Dateien MIT Kommentaren zusammenführen

Erstellt von andre67 vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.060 Views
andre67 Themenstarter:in
15 Beiträge seit 2012
vor 10 Jahren
[gelöst] XML Dateien MIT Kommentaren zusammenführen

Hallo zusammen,

ich suche vergeblich nach einer Lösung, wie ich 2 XML-Dateien samt Kommentaren und eventuell auch Leerzeilen (die aber nicht ganz so wichtig sind) zusammenführen kann (.net 2.0).

Bisher mache ich es mit DataSets und die neue Datei ist ohne! Kommentare:


		DataSet ds = new DataSet();
		ds.ReadXml(xmlreader1);
		DataSet ds2 = new DataSet();
		ds2.ReadXml(xmlreader2);
		ds.Merge(ds2);

Kann mir bitte jemand einen Tipp geben? Die Suche nach einer Lösung erweist sich als schwierig, weil in jedem Forum das Wort "Kommentar", bzw. "comment" x-mal vorkommt X(

btw: In einem späteren Schritt muss ich aus einer der beiden Dateien eine dritte XML-Datei 'subtrahieren' (sorry, wenn ich mich da vielleicht den falschen Begriff gewählt habe).

Schöne Grüße
Andre

...oder bin ich vielleicht mit dem Dataset auf dem Holzweg, um XML-Dateien zusammenzuführen?

849 Beiträge seit 2006
vor 10 Jahren

Zumindest beim Lesen habe ich etwas gefunden:

Reading Xml Comments

Ja, und ich glaube Du bist mit dem Dataset auf dem Holzweg.
Ich denke Du must dich da mit XmlDocument etc rumschlagen 😦

S
902 Beiträge seit 2007
vor 10 Jahren

Welche Kommentare meinst du?
Einfache XML Kommentare, oder XSD-Documentation-Kommentare?

mfg
serial

andre67 Themenstarter:in
15 Beiträge seit 2012
vor 10 Jahren

Hallo und vielen Dank für das Interesse, bzw. die angebotene Hilfe!

Ich habe eine XML-Konfigurationsdatei, die von später einem Programm eingelesen wird, mit folgendem Schema:


<?xml version="1.0" encoding="utf-8"?>
<!-- Kommentare sollen erhalten bleiben -->
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="..." sku="..." />
  </startup>
  <appSettings>
    <!-- Params -->
    <add key="..." value="..." />
    <!-- ... -->
    <add key="..." ... value... />
    <!-- ... -->
    <add key="..." ... value... />
    </appSettings>
<configuration>

Die erste Datei soll um folgende (add-Elemente) ergänzt werden, wenn ich in meiner Anwendung entsprechenden Button betätige:


<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<appSettings>	
		<!-- Kommentar der mit kopiert werden soll -->
		<add key="..." ... value... />
		<add key="..." ... value... />
                ...
	</appSettings>
</configuration>

Ich will es nun nicht mit einem Streamreader realisieren (OK, wenns nicht anders geht, dann ja), sondern mit System.XML, komme aber irgendwie nicht weiter.
Mit Kommentaren einlesen bekomme ich hin:


                XmlReaderSettings settings = new XmlReaderSettings();
                settings.IgnoreWhitespace = false;     // nicht so wichtig
                settings.IgnoreComments = false;

                XmlReader xmlreader1 = XmlReader.Create(@"C:\file1.config", settings);

                XmlReader xmlreader2 = XmlReader.Create(@"C:\file2.xml", settings);

...aber dann bekomme ich irgendwie beide nicht gemerged.

Hinzu kommt später eine dritte Datei mit gleichem Schema. Deren Inhaltselemente muss ich bei betätigen eines Buttons in der ersten Datei auf Vorhanden überprüfen, bei nichtvorhanden der ersten Datei hinzufügen und bei vorhanden überschreiben.

Schöne Grüße
Andre

PS:
Kann mir vielleicht jemand ein gutes Buch zu XML+C# empfehlen?

andre67 Themenstarter:in
15 Beiträge seit 2012
vor 10 Jahren

Hallo zusammen,

ich habe es jetzt so gelöst:


            XmlReaderSettings settings = new XmlReaderSettings();
            settings.IgnoreWhitespace = false;
            settings.IgnoreComments = false;
            XmlReaderSettings settings2 = new XmlReaderSettings();
            settings2.IgnoreWhitespace = false;
            settings2.IgnoreComments = false;
            XmlReader xmlreaderOriginalCfg = XmlReader.Create(@"C:\...xml", settings);
            XmlReader xmlreaderVerificationCfg = XmlReader.Create(@"C:\....xml", settings);

            XmlDocument myData = new XmlDocument();
            myData.Load(xmlreaderOriginalCfg);
            XmlDocument myData2 = new XmlDocument();
            myData2.Load(xmlreaderVerificationCfg);

            XmlNode parentNode = myData.SelectSingleNode("/configuration/appSettings");

            foreach (XmlComment comment in myData2.SelectNodes("//comment()"))
            {
                XmlComment importedCom = myData.CreateComment(comment.Value);
                parentNode.AppendChild(importedCom);

                foreach (XmlNode node in myData2.DocumentElement.SelectNodes("/configuration/appSettings/add"))
                {
                    XmlNode imported = myData.ImportNode(node, true);
                    parentNode.AppendChild(imported);

                }
            }
            myData.Save(this.pathNew);

Ich markiere diesen Thread erst in 1-2 Tagen als gelöst, falls noch irgendwelche Einwände oder Verbesserungsvorschäge kommen^^

Auf jeden Fall vielen Dank an Euch!
Andrae