Laden...

Zusammenfügen / Merge von mehreren Datenquellen ... Ausgangsquelle XML

Erstellt von micha0827 vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.909 Views
M
micha0827 Themenstarter:in
85 Beiträge seit 2015
vor 6 Jahren
Zusammenfügen / Merge von mehreren Datenquellen ... Ausgangsquelle XML

verwendetes Datenbanksystem: MS SQL 2016

Guten Abend,

aktuell stehe ich vor einem größeren Problem. Ich habe 3 XML Dateien von denen jede einzelne Datensätze in Form von Name/Value Pairs enthält und einem Beschreibungsfeld. Hier ein Beispiel von 2 Datensätzen:


<Compatibility>
  <NameValueList/>
  <NameValueList>
    <Name>Make</Name>
    <Value>VW</Value>
  </NameValueList>
  <NameValueList>
     <Name>Model</Name>
     <Value>Transporter V Bus</Value>
  </NameValueList>
  <NameValueList>
    <Name>Platform</Name>
    <Value>7HB, 7HJ, 7EB, 7EJ, 7EF, 7EG, 7HF, 7EC</Value>
  </NameValueList>
  <NameValueList>
    <Name>Type</Name>
    <Value>2.0 BiTDI</Value>
  </NameValueList>
  <NameValueList>
    <Name>Production Period</Name>
    <Value>2009/09-2015/08</Value>
  </NameValueList>
  <NameValueList>
    <Name>Engine</Name>
    <Value>1968 ccm, 132 KW, 180 PS</Value>
  </NameValueList>
  <CompatibilityNotes>Weitere Daten entnehmen Sie bitte unten aus der Beschreibung !</CompatibilityNotes>
</Compatibility>
<Compatibility>
  <NameValueList/>
  <NameValueList>
    <Name>Make</Name>
    <Value>VW</Value>
  </NameValueList>
  <NameValueList>
    <Name>Model</Name>
    <Value>Transporter V Bus</Value>
  </NameValueList>
  <NameValueList>
    <Name>Platform</Name>
    <Value>7HB, 7HJ, 7EB, 7EJ, 7EF, 7EG, 7HF, 7EC</Value>
  </NameValueList>
  <NameValueList>
    <Name>Type</Name>
    <Value>2.0 BiTDI 4motion</Value>
  </NameValueList>
  <NameValueList>
    <Name>Production Period</Name>
    <Value>2009/09-2015/08</Value>
  </NameValueList>
  <NameValueList>
    <Name>Engine</Name>
    <Value>1968 ccm, 132 KW, 180 PS</Value>
  </NameValueList>
  <CompatibilityNotes>Weitere Daten entnehmen Sie bitte unten aus der Beschreibung !</CompatibilityNotes>
</Compatibility>

Jede XML Datei kann dabei maximal 3000 Datensätze enthalten. Mein Problem ist dabei die 3 XML Dateien zusammenzuführen. Normal keine große Sache, aber das Feld "CompatibilityNotes" kann bei allen 3 Dateien unterschiedlich sein und muss dann zusammengefügt werden. Alle anderen Daten sind Vorgaben des Herstellers, nur die "CompatibilityNotes" sind vom Kunden editierbar und können demzufolge bei jeder Datei unterschiedlich sein auch wenn die Datensätze an sich gleich sind. Einen Weg über eine Temp DB sehe ich momentan noch nicht als optimal an, Eindimensionale Array habe ich schon zusammengefügt, mit und ohne Duplikate, habe aber momentan ein Denkblockade was dieses eine Feld angeht. Eventuell über Dataset.Merge() ??

Danke
Michael

D
985 Beiträge seit 2014
vor 6 Jahren

Ich kann mich ja irren, aber für einen Automatismus out-of-the-box sehe ich hier eher schwarz.

Gib doch mal als Beispiel zwei (oder drei) Eingangsdateien und die erwartete Ausgangsdatei, dann kann man da etwas zu sagen.

Ist die Reihenfolge der Datensätze fest vorgegeben?
Kommen von jedem Datenlieferanten immer alle Datensätze oder kann es vorkommen, dass A 10 Datensätze liefert, B 8 und C 9?

Wenn es da solche (oder andere) Besonderheiten gibt, dann bitte auch in den Beispieldaten berücksichtigen.

R
74 Beiträge seit 2006
vor 6 Jahren

mit DataTable.Merge könnten zumindest die 3 Dateien zunächst
zusammengeführt werden.
https://msdn.microsoft.com/de-de/library/fk68ew7b(v=vs.110).aspx
Nur der PK muss über 7 Spalten definiert werden ...
Von der Ergebnistabelle aus auf die beiden anderen mit Select und PK ...
zugreifen, die Strings zusammensetzen - fertig.

Nur sollen doppelte Einträge nicht doppelt sein - sicherlich.

Evtl. kann helfen die Spalte: CompatibilityNotes umzubenennen ...
CompatibilityNotes1, CompatibilityNotes2, CompatibilityNotes3
und mit MissingSchemaAction bei Merge arbeiten

Oder Sqlite nutzen "group_concat"
https://stackoverflow.com/questions/18778844/group-concat-in-sqlite

Wenn Du Dataset.Merge() in Betracht ziehst - wirst wohl nicht an MS SQL 2016 gebunden sein 😃