Laden...

XElement in XDocument mergen

Erstellt von g0su vor 3 Jahren Letzter Beitrag vor 3 Jahren 761 Views
G
g0su Themenstarter:in
45 Beiträge seit 2013
vor 3 Jahren
XElement in XDocument mergen

Hallo zusammen,

ich habe eine Frage zum Thema XML.

Ich habe ein XDocument mit dem Inhalt:

<A>
<B />
<C>
   <C1>123</C1>
   <C3>234</C3>
      <C3A>345</C3A>
</C>
</A>

und ein XElement mit dem Inhalt

<A>
<B>123</B>
<C>
   <C1>abc</C1>
   <C2>123</C2>
</C>
<F>123</F>
</A>

Dokument und Element können komplett unterschiedlich aufgebaut sein, am Ende sollen aber Unterschiede aus dem Element übernommen worden sein und "neue" Nodes hinzugefügt werden.

Leider scheitert es bisher an der Umsetung.

Ein

XDocument.Root.Add(XElement);

funktioniert leider nur, wenn nichts aus dem XElement bereits im XDocument enthalten ist.

6.911 Beiträge seit 2009
vor 3 Jahren

Hallo g0su,

wie würdest du das Mergen denn händisch durchführen?
Vermutlich indem du schaust welches Element an der jeweiligen Position vorhanden ist od. nicht und dann überschreiben / einfügen.

Genau so ist es dann auch zu programmieren.

Mit XElement hast du bereits ein Objekt-Modell vom XML, durch das du iterieren und so die Knoten vergleichen kannst.

Du kannst auch die beiden XML-Modelle als "Eingaben" für ein neues -- resultierendes -- XML-Modell verwenden, wobei eines als "Master" fungiert und dessen Werte überschrieben werden können vom anderen.

Such dir ein Vorgehen aus wie es für dich einfacher ist.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

G
g0su Themenstarter:in
45 Beiträge seit 2013
vor 3 Jahren

Hi, danke für Deine Antwort.

Hast Du noch einen Tipp, wie das bei "unterschiedlichen" Tiefen gehen soll?

16.835 Beiträge seit 2008
vor 3 Jahren

So wie Du es händisch auch machst, wie gfoidl ja sagte.
Wie erkennst Du es mit dem Auge? Vermutlich anhand des Names der Node, wo es danach eingefügt werden soll.