AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi (unbekannte) XML Dateien zusammenführen bzw. mergen
Thema durchsuchen
Ansicht
Themen-Optionen

(unbekannte) XML Dateien zusammenführen bzw. mergen

Ein Thema von padavan · begonnen am 22. Sep 2009 · letzter Beitrag vom 24. Sep 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#11

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 23. Sep 2009, 19:08
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);
$2B or not $2B
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 24. Sep 2009, 06:29
wenn, dann so

Delphi-Quellcode:
      for i2 := 0 to NodeAnother.childNodes.length - 1 do
        NodeBase.childNodes[i].appendChild(NodeAnother.childNodes[i2]); //0
Bringt aber beim letzten Durchlauf immer: "Kein untergeordneter Knoten"

Ich brech noch ab
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#13

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 24. Sep 2009, 08:09
ups, immer diese Indize beim Copy&Paste

Code:
[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]);
oder?
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;
$2B or not $2B
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 24. Sep 2009, 08:25
Das bringt leider immernoch -> siehe Anhang

wenn ich es so probiere
Delphi-Quellcode:
      while NodeBase.childNodes[i].childNodes.length > 0 do
        NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].firstChild);
klappt das zwar, aber im nächsten Durchlauf bei
Delphi-Quellcode:
  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
    ...
knallt´s.
Miniaturansicht angehängter Grafiken
knoten_207.jpg  
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 24. Sep 2009, 08:31
Ha!

So geht´s

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

        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)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 24. Sep 2009, 08:35
menno, der Index war doch richtig -.-°

also eigentlich müßte es doch so funktionieren
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[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;
[edit]
Zitat:
So geht´s
also ob While oder For-Do sollte egal sein, abgesehn davon, daß bei For-Do nur einmal die Anzahl abgefragt wird.

[add]
ach ja, warum da die Exception kommt ...
(NodeBase.childNodes[i].firstChild.text <> NodeAnother.firstChild.text) hier ist keine Prüfung eingebaut, ob es überhaupt je mindestens einen ChildNode gibt, bevor drauf zugegriffen wird.
$2B or not $2B
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#17

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 24. Sep 2009, 09:17
stimmt.

if NodeAnother.childNodes[i].hasChildNodes = true then so geht´s aber leider schon mal nicht
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#18

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 24. Sep 2009, 09:26
eventuell so?
Delphi-Quellcode:
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;
[edit]
ups ... noch schnell ein paar NOT einbauen
$2B or not $2B
  Mit Zitat antworten Zitat
padavan

Registriert seit: 12. Jan 2005
271 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 24. Sep 2009, 11:08
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;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#20

Re: (unbekannte) XML Dateien zusammenführen bzw. mergen

  Alt 24. Sep 2009, 11:25
Zitat:
/<<<< operator not applicable to this operand
da hatte ich einfach nur etwas zuviel gelöscht

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:
<<<< wo kommt i2 rein?
garnicht?

es wird einfach immer nur i2-mal der erste Node gelöscht oder übertragen
Delphi-Quellcode:
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
oder
Delphi-Quellcode:
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
OK, man kann, zumindestens beim Löschen, den Index i2 verwenden,
Delphi-Quellcode:
for i2 := NodeBase.childNodes[i].childNodes.length - 1 downto 0 do
  NodeBase.childNodes[i].removeChild(NodeBase.childNodes[i].childNodes[i2]);
muß man aber nicht, da eh alles gelöscht werden soll.
Und ob man da von hinten oder vorne anfängt ist hier relativ egal.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz