DataSet in XML schreiben mit Save (aus EDR Winform Helpers) oder WriteXML hat unterschiedliche Ergebnisse

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von OliverSte.

    DataSet in XML schreiben mit Save (aus EDR Winform Helpers) oder WriteXML hat unterschiedliche Ergebnisse

    Hi,

    heut habe ich ein total simples DataSet in eine XML gepumpt und wundere mich, dass je nachdem, welche Funktion ich benutze, die Ergebnisse unterschiedlich sind.
    Fangen wir mal mit dem DataSet an:

    Die Beziehungen sind auf "geschachtelt" eingestellt, das ist gleich wichtig.

    Das Ergebnis bei der Ausgabe mit DataSet.Save() (die Erweiterung von @ErfinderDesRades) sieht so aus:

    XML-Quellcode

    1. <?xml version="1.0" standalone="yes"?>
    2. <DataSetDS03 xmlns="ica">
    3. <DS03_data DS03_data_Id="0">
    4. <SE>N060000</SE>
    5. <RZ>RZ Nord</RZ>
    6. <dateidatum>2017-09-29T11:20:47.1031024+02:00</dateidatum>
    7. <zeitraum>2014</zeitraum>
    8. <DS03 DS03_data_Id="0">
    9. <kommNr>N01000000000489565</kommNr>
    10. </DS03>
    11. </DS03_data>
    12. <DS03_ictyp DS03_Id="1">
    13. <ICaTyp>Nein</ICaTyp>
    14. <Bemerkung_SE>Aus Gründen zum Testen</Bemerkung_SE>
    15. <ScreeningDatum>13.03.2008</ScreeningDatum>
    16. </DS03_ictyp>
    17. </DataSetDS03>


    Man sieht daran sofort, hier ist lediglich die erste Beziehung geschachtelt, die zweite nicht!
    Wieder einlesen kann man das Dingens übrigens nicht!

    So sieht das aus, wenn es richtig ist. Diese Ausgabe erzeugte WriteXML():

    XML-Quellcode

    1. <?xml version="1.0" standalone="yes"?>
    2. <DataSetDS03 xmlns="ica">
    3. <DS03_data DS03_data_Id="0">
    4. <SE>N060000</SE>
    5. <RZ>RZ Nord</RZ>
    6. <dateidatum>2017-09-29T11:14:33.9231613+02:00</dateidatum>
    7. <zeitraum>2014</zeitraum>
    8. <DS03 DS03_data_Id="0">
    9. <kommNr>N01000000000489565</kommNr>
    10. <DS03_ictyp DS03_Id="1">
    11. <ICaTyp>Nein</ICaTyp>
    12. <Bemerkung_SE>Aus Gründen zum Testen</Bemerkung_SE>
    13. <ScreeningDatum>13.03.2008</ScreeningDatum>
    14. </DS03_ictyp>
    15. </DS03>
    16. </DS03_data>
    17. </DataSetDS03>


    Geschachtelt, wie es soll und lässt sich auch wieder einlesen.
    Was mich total wundert, wo sind die IDs geblieben?
    keine Ahnung. Meine Helpers nutzen ja auch Dataset.WriteXml - evtl. tätigen sie temporäre Einstellungen, die sich mit geschachtelten Beziehungen nicht vertragen.
    Ich hab da nicht groß Aktien drin, weil geschachtelte Beziehungen können keine m:n - Relationen modellieren, und auf diese Option würde ich keinesfalls verzichten wollen.
    Hmm, wenn ich das DataSet ungeschachtelt mache, haben WriteXML und Save das gleiche Ergebnis, eben genau das, was Save auch bei geschachtelt macht.

    Jetzt bin ich verwirrt, denn das kann man wieder einladen. Wie geht das? In den DS03 steht doch die eigene DS03_Id gar nicht, sondern nur die Parent_Id? Und in den DS03_ictyp steht eine DS03_id, die man sonst nirgendwo sieht. Würde man die Reihenfolge in der XML ändern, gäbe es Chaos. Ok, macht ja keiner, aber es entsteht ein Unbehagen.

    Kann man das irgendwie forcieren, dass die eigenen IDs mit ausgegeben werden? Hab so das Gefühl, mein DataSet ist nicht so ganz optimal ...