![]() |
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
also dann das löschen so :)
Delphi-Quellcode:
for i2 := 0 to NodeBase.childNodes[i].childNodes.length - 1 do
NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild); |
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
wenn, dann so
Delphi-Quellcode:
Bringt aber beim letzten Durchlauf immer: "Kein untergeordneter Knoten"
for i2 := 0 to NodeAnother.childNodes.length - 1 do
NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[i2]); //0 Ich brech noch ab |
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
ups, immer diese Indize beim Copy&Paste :oops:
Code:
oder? :gruebel:
[color=#0000AF][b]for[/b][/color] i2 := 0 [color=#0000AF][b]to[/b][/color] NodeBase.childNodes[i].childNodes.length - 1 [color=#0000AF][b]do[/b][/color]
NodeBase.childNodes[i].removeChild(NodeBase.childNodes[[b]i2[/b]].[b]firstChild[/b]);
Code:
NodeBase.childNodes[i].[b]firstChild[/b].removeChild(NodeBase.childNodes[[b]i2[/b]].[b]firstChild[/b]);
Delphi-Quellcode:
while Assigned(NodeAnother) do
begin NodeNext := NodeAnother.NextSibling; i := 0; while (i < NodeBase.childNodes.length) and (NodeBase.childNodes[i].firstChild.text <> NodeAnother.firstChild.text) do Inc(i); if i < NodeBase.childNodes.length then begin for i2 := 0 to NodeBase.childNodes[i].childNodes.length - 1 do NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i2].firstChild); for i2 := 0 to NodeAnother.childNodes.length - 1 do NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[0]); end else NodeBase.appendChild(NodeAnother); NodeAnother := NodeNext; end; |
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
Liste der Anhänge anzeigen (Anzahl: 1)
Das bringt leider immernoch -> siehe Anhang
wenn ich es so probiere
Delphi-Quellcode:
klappt das zwar, aber im nächsten Durchlauf bei
while NodeBase.childNodes[i].childNodes.length > 0 do
NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild);
Delphi-Quellcode:
knallt´s.
while Assigned(NodeAnother) do
begin NodeNext := NodeAnother.NextSibling; i := 0; while (i < NodeBase.childNodes.length) <<<<<Access Violation and (NodeBase.childNodes[i].firstChild.text <> NodeAnother.firstChild.text) do Inc(i); if i >= NodeBase.childNodes.length then ... |
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
Ha!
So geht´s
Delphi-Quellcode:
:dancer:
while Assigned(NodeAnother) do
begin NodeNext := NodeAnother.NextSibling; i := 0; while (i < NodeBase.childNodes.length) and (NodeBase.childNodes[i].firstChild.text <> NodeAnother.firstChild.text) do Inc(i); if i < NodeBase.childNodes.length then begin while NodeBase.childNodes[i].childNodes.length > 0 do NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild); for i2 := 0 to NodeAnother.childNodes.length - 1 do NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[0]); end else NodeBase.appendChild(NodeAnother); NodeAnother := NodeNext; end; (jetzt muss ich erst mal gut durchtesten, nachdem ich die Euphorie gelegt hat) |
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
menno, der Index war doch richtig -.-°
also eigentlich müßte es doch so funktionieren :gruebel:
Delphi-Quellcode:
[edit]
while Assigned(NodeAnother) do
begin NodeNext := NodeAnother.NextSibling; i := 0; while (i < NodeBase.childNodes.length) and (NodeBase.childNodes[i].firstChild.text <> NodeAnother.firstChild.text) do Inc(i); if i < NodeBase.childNodes.length then begin for i2 := 0 to NodeBase.childNodes[i].childNodes.length - 1 do NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild); for i2 := 0 to NodeAnother.childNodes.length - 1 do NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[0]); end else NodeBase.appendChild(NodeAnother); NodeAnother := NodeNext; end; Zitat:
[add] ach ja, warum da die Exception kommt ...
Delphi-Quellcode:
hier ist keine Prüfung eingebaut, ob es überhaupt je mindestens einen ChildNode gibt, bevor drauf zugegriffen wird.
(NodeBase.childNodes[i].firstChild.text <> NodeAnother.firstChild.text)
|
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
stimmt.
Delphi-Quellcode:
so geht´s aber leider schon mal nicht
if NodeAnother.childNodes[i].hasChildNodes = true then
|
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
eventuell so?
Delphi-Quellcode:
[edit]
while Assigned(NodeAnother) do
begin NodeNext := NodeAnother.NextSibling; i := 0; while (i < NodeBase.childNodes.length) and (mot Assigned(NodeBase.childNodes[i].firstChild) or not Assigned(NodeAnother.firstChild) or (NodeBase.childNodes[i].firstChild) <> NodeAnother.firstChild.text)) do Inc(i); if i < NodeBase.childNodes.length then begin for i2 := 0 to NodeBase.childNodes[i].childNodes.length - 1 do NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild); for i2 := 0 to NodeAnother.childNodes.length - 1 do NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[0]); end else NodeBase.appendChild(NodeAnother); NodeAnother := NodeNext; end; ups ... noch schnell ein paar NOT einbauen |
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
Delphi-Quellcode:
while Assigned(NodeAnother) do
begin NodeNext := NodeAnother.NextSibling; i := 0; while (i < NodeBase.childNodes.length) and (not Assigned(NodeBase.childNodes[i].firstChild) or not Assigned(NodeAnother.firstChild) or (NodeBase.childNodes[i].firstChild) <> NodeAnother.firstChild.text)) do //<<<< operator not applicable to this operand type Inc(i); if i < NodeBase.childNodes.length then begin for i2 := 0 to NodeBase.childNodes[i].childNodes.length - 1 do NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild); // <<<< wo kommt i2 rein? for i2 := 0 to NodeAnother.childNodes.length - 1 do NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[0]); // <<<< wo kommt i2 rein? end else NodeBase.appendChild(NodeAnother); NodeAnother := NodeNext; end; |
Re: (unbekannte) XML Dateien zusammenführen bzw. mergen
Zitat:
Delphi-Quellcode:
while Assigned(NodeAnother) do
begin NodeNext := NodeAnother.NextSibling; i := 0; while (i < NodeBase.childNodes.length) and (not Assigned(NodeBase.childNodes[i].firstChild) or not Assigned(NodeAnother.firstChild) or (NodeBase.childNodes[i].firstChild.text <> NodeAnother.firstChild.text)) do Inc(i); if i < NodeBase.childNodes.length then begin for i2 := 0 to NodeBase.childNodes[i].childNodes.length - 1 do NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild); for i2 := 0 to NodeAnother.childNodes.length - 1 do NodeBase.childNodes[i].appendChild(NodeAnother.firstChild); end else NodeBase.appendChild(NodeAnother); NodeAnother := NodeNext; end; Zitat:
es wird einfach immer nur i2-mal der erste Node gelöscht oder übertragen
Delphi-Quellcode:
oder
begin
for i2 := 0 to NodeBase.childNodes[i].childNodes.length - 1 do NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild); for i2 := 0 to NodeAnother.childNodes.length - 1 do NodeBase.childNodes[i].appendChild(NodeAnother.firstChild); end else
Delphi-Quellcode:
OK, man kann, zumindestens beim Löschen, den Index i2 verwenden,
begin
for i2 := 0 to NodeBase.childNodes[i].childNodes.length - 1 do NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].childNodes[0]); for i2 := 0 to NodeAnother.childNodes.length - 1 do NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[0]); end else
Delphi-Quellcode:
muß man aber nicht, da eh alles gelöscht werden soll.
for i2 := NodeBase.childNodes[i].childNodes.length - 1 downto 0 do
NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].childNodes[i2]); Und ob man da von hinten oder vorne anfängt ist hier relativ egal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz