2011-01-14 4 views
0

Ich habe zuvor über ein ähnliches Problem in RapidXml befragt, ich möchte jetzt dasselbe wissen, aber mit Xerces-C.Anfügen eines Xerces-C DOMEelements von einem Xerces-C DOMDocument an ein anderes

Ich arbeite an einer C++ - Anwendung, die XML analysieren muss.

Beachten Sie Folgendes:

XML-Datei: file1.xml

<root> 
    <node1>value1</node1> 
    <node2>value2</node2> 
</root> 

XML-Datei: file2.xml

<anotherroot> 
    <anothernode1>anothervalue1</anothernode1> 
    <anothernode2>anothervalue2</anothernode2> 
</anotherroot> 

meine CPP-Datei

using namespace xercesc; 
// First tree 
XercesDOMParser* parser1 = new XercesDOMParser(); 
parser1->parse("file1.xml"); // Loading xml and building tree (XercesDOMParser owns the document) 
DOMDocument* doc1 = parser1->getDocument(); 
DOMElement* el1 = doc1->getDocumentElement(); // Getting root 
// Second tree 
XercesDOMParser* parser2 = new XercesDOMParser(); 
parser2->parse("file2.xml"); // Loading xml and building tree (XercesDOMParser owns the document) 
DOMDocument* doc2 = parser2->getDocument(); 
DOMElement* el2 = doc2->getDocumentElement(); // Getting root 

würde ich gerne das tun:

el2->appendChild(el1); 

so dass die endgültige xml in dem Dokument doc2 ist

<anotherroot> 
    <anothernode1>anothervalue1</anothernode1> 
    <anothernode2>anothervalue2</anothernode2> 
    <root> 
     <node1>value1</node1> 
     <node2>value2</node2> 
    </root> 
</anotherroot> 

Aber wenn sie dies tun, erhalte ich:

nach dem Werfen einer Instanz ‚xercesc_3_1 genannt terminate :: DOMException 'Aborted

Ich schätze, weil das Element, das ich anfügen möchte, zu einem anderen Baum gehört. Wie kann ich dieses Ergebnis erreichen? Das Problem ist im Grunde genommen, dass ich einen Baum und eine Zeichenfolge habe, die ein XML-Segment enthalten. Ich muss STRING PARIEREN, um ein DOM-Objekt zu erhalten, das dieses XML darstellt und an einen Knoten des anderen Baums anfügt. Das Wichtigste ist, dass ich die Zeichenfolge mit dem XML innen habe ... Ich kann diese wichtige Anforderung nicht umgehen. Von einer Schnur, die Dom und das Anhängen erhalten. Es scheint etwas unmöglich ... möglich zu sein?

Wie kann ich das tun ??? Ich kann wirklich nicht die Tatsache akzeptieren, dass Xerces-C-Programmierer nie ein solches Szenario dachten und keine vernünftige Funktionalität zur Verfügung stellten, um eine solche Lösung zu erreichen.

Vielleicht würde es reichen, auch wenn ich sagen könnte, ob es einen Weg gibt, einen Knoten oder ein Element zu ändern. Sie sehen, es gibt die WRONG_DOCUMENT_ERR, die ausgelöst wird, wenn das, was ich vorher versucht habe, ausgeführt wird. Nun, wenn die Bibliothek eine Möglichkeit bietet, den Besitz eines Knotens so zu ändern, dass er zu einem anderen Dokument gehört, wäre ich in Ordnung und mein Problem wäre gelöst!

Thankyou

Antwort

1

DOMDocument::importNode ist ein DOM Level 2 function, die genau dieses Problem zu lösen, wurde entwickelt:

DOMElement * el1Imported = doc2->importNode(el1, true); 
el2->appendChild(el1Imported); // element is now in right document 
+0

SIE EINEN GUTEN TIMING Bradley HABEN. :) Ich war im Doc von Xerces Roaming und fand diese Methode:) ... mal sehen, ob es funktioniert :) – Andry

+0

FUNKTIONIERT perfekt ... nun, ich fand die Lösung zuerst, aber Sie waren sehr nett, mir zu antworten ... niemand hat es getan :(Danke ... Du verdienst die richtige Antwort :) – Andry

Verwandte Themen