AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Node von einem Dokument zum anderen kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Node von einem Dokument zum anderen kopieren

Ein Thema von Sascha L · begonnen am 8. Aug 2006 · letzter Beitrag vom 9. Aug 2006
Antwort Antwort
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#1

Node von einem Dokument zum anderen kopieren

  Alt 8. Aug 2006, 14:43
Hi,

habe zwei IXMLDocuments. Nun möchte ich einen IXMLNode vom einen zum anderen kopieren, das Problem ist nur, dass ich ständig folgende Fehlermeldung bekomme:

"NewChild was created from a different document than the one that created this node".

Gruß
Sascha
Sascha
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Node von einem Dokument zum anderen kopieren

  Alt 8. Aug 2006, 16:06
Hallo Sascha,

zeige bitte, wie du kopierst.

Grüße vom marabu
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Node von einem Dokument zum anderen kopieren

  Alt 8. Aug 2006, 16:24
Habs einmal mit AppendChild und einmal mit Add bzw. AddNode ausprobiert.

Also mit kopieren meinte ich jetzt nichts besonderes, sondern einfach bei beiden Documents die Nodes selektieren und den einen Node an den anderen hängen, was ja intern in nur einem Document ohne Probleme geht.

Die Fehlermeldung, die ich erhalte, ist ja eine allgemeine, weil es - aus welchen Gründen auch immer- nicht erlaubt ist einen Node von einem Document an einen Node von einem anderen Document anzuhängen. D.h. ich brauche nun eine Kopierfunktion, mit der es doch geht.
Sascha
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Node von einem Dokument zum anderen kopieren

  Alt 8. Aug 2006, 19:38
Schade, dass du deinen Code nicht zeigen kannst. Ich hatte gefragt, weil ich da kein Problem kenne:

Delphi-Quellcode:
uses
  MSXML2;

procedure TMainForm.ButtonClick(Sender: TObject);
var
  inDoc: IXMLDOMDocument2;
  outDoc: IXMLDOMDocument2;
  nIn, nOut: IXMLDOMNode;
  msg: String;
begin
  inDoc := CoDomDocument.Create;
  inDoc.async := False;
  outDoc := CoDomDocument.Create;
  outDoc.async := False;

  with inDoc do
  begin
    documentElement := CreateElement('inroot');
    nIn := documentElement.appendChild(CreateElement('intest'));
  end;

  with outDoc do
  begin
    documentElement := CreateElement('outroot');
    nOut := documentElement.appendChild(CreateElement('outtest'));
    nOut.appendChild(nIn.cloneNode(False));
    if Assigned(inDoc.documentElement)
      then msg := inDoc.xml
      else msg := 'n/a';
    ShowMessage('after node copy:'#13#10
      + 'inDoc.xml:'#13#10
      + msg + #13#10
      + 'outDoc.xml:'#13#10
      + outDoc.documentElement.xml
    );
  end;

  with outDoc do
  begin
    documentElement := inDoc.documentElement;
    if Assigned(inDoc.documentElement)
      then msg := inDoc.xml
      else msg := 'n/a';
    ShowMessage('after node transfer:'#13#10
      + 'inDoc.xml:'#13#10
      + msg + #13#10
      + 'outDoc.xml:'#13#10
      + outDoc.documentElement.xml
    );
  end;

end;
marabu
  Mit Zitat antworten Zitat
Sascha L

Registriert seit: 4. Jun 2004
Ort: Hamm
390 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Node von einem Dokument zum anderen kopieren

  Alt 8. Aug 2006, 21:09
Klar, kann ich den Code zeigen Halte ihn nur für trivial...

Ich sollte noch erwähnen, dass ich OmniXML verwende, aber das ist ja nur eine Art "Weiterentwicklung" von MSXML.

Delphi-Quellcode:
{ Import-Liste laden }
  XMLImport := CreateXMLDoc;
  XMLImport.Load(ImportFile);

  
  NodeList := XMLImport.SelectNodes(ExportNode);

  { Alle gefundenen Nodes ins Template kopieren }
  for i := 0 to NodeList.Length - 1 do begin
    XMLTemplate := CreateXMLDoc;
    XMLTemplate.Load(Template);

    Node := NodeList.Item[i];

    Node2 := XMLTemplate.SelectSingleNode(AggNode);

    if Node2 <> nil then Node2.AppendChild(Node); // Hier kommt die oben genannte Fehlermeldung
  end;
Ich hab auch schon versucht, die Nodes direkt anzuhängen, ohne dass ich eine Variable "Node" verwende.

Der Code ist natürlich noch nicht fertig und ergäbe so auch keinen Sinn. Am Ende soll für jedes Mal eine neue Datei gespeichert werden.


Gruß
Sascha

P.S.: Wenn ich deinen Code kopiere und es mit OmniXML mache, dann bekomme ich auch dieselbe Fehlermeldung.

P.P.S.: Hab nun einfach in der OmniXML-Unit die entsprechende Stelle auskommentiert, die verhindert, dass man einen Node zum anderen kopieren kann
Sascha
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Node von einem Dokument zum anderen kopieren

  Alt 9. Aug 2006, 21:13
Hallo Sascha,

OmniXML hat einige Defizite. Unter anderem wird seit Jahren an der Methode CloneNode gebastelt, aber ohne durchschlagenden Erfolg. Tatsache ist, dass auch in der aktuellen Version das einfache Übertragen von Knoten zwischen verschiedenen Dokumenten nicht möglich ist.

Zitat von Sascha L:
Ich sollte noch erwähnen, dass ich OmniXML verwende, aber das ist ja nur eine Art "Weiterentwicklung" von MSXML
Das stufe ich mal als Folklore ein.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:32 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