2009-03-11 8 views

risposta

13

Un XmlDocumentè fondamentalmente un XmlNode, in modo da poter aggiungere che, proprio come si farebbe per qualsiasi altro XmlNode. Tuttavia, la differenza deriva dal fatto che questoXmlNode non appartiene al documento di destinazione, pertanto sarà necessario utilizzare il metodo ImportNode e quindi eseguire l'append.

// xImportDoc is the XmlDocument to be imported. 
// xTargetNode is the XmlNode into which the import is to be done. 

XmlNode xChildNode = xSrcNode.ImportNode(xImportDoc, true); 
xTargetNode.AppendChild(xChildNode); 
+2

ah sì, ma cos'è xSrcNode? Perché viene visualizzato il messaggio di errore: Impossibile importare nodi di tipo "Documento". Che tipo è xTargetNode? – fijiaaron

+2

@fijiaaron È necessario selezionare l'elemento root dal doc: 'XmlNode xChildNode = xSrcNode.ImportNode (xImportDoc.DocumentElement, true);' – nmat

+0

Se XmlDoc è correntemente digitato come XmlNode, o se si sta tentando di importare un XmlNode puoi invece eseguire 'XmlNode xChildNode = xSrcNode.ImportNode (xImportDoc.OwnerDocument.DocumentElement, true);' –

1

Forse in questo modo:

XmlNode node = ...... // belongs to targetDoc (XmlDocument) 

node.AppendChild(targetDoc.ImportNode(xmlDoc.DocumentElement)); 

Marc

+0

per quanto ne so, si sono tenuti a ** import * un nodo, se non appartiene alla corrente XmlDocument prima puoi aggiungerlo. Vedi la mia risposta. – Cerebrus

+0

Sì, sembra che sia necessario chiamare ImportNode, ma che * creerà * una copia del documento Xml ..... –

5

Sì:

XmlNode imported = targetNode.OwnerDocument.ImportNode(otherDocument.DocumentElement, true); 
targetNode.AppendChild(imported); 

Credo che questo crea un clone del documento però.

0

Una volta ottenuto il nodo radice del documento XML in questione, è possibile aggiungerlo come nodo figlio del nodo in questione. Ha senso?

1

Diciamo che si ha la seguente costruzione:

la seguente struttura viene memorizzata in un XmlElement denominato XmlElement:

</root> 

e la seguente struttura è memorizzato in un FooNode oggetto XmlNode nome ;

<foo> 
    <bar>This is a test</bar> 
    <baz>And this is another test</baz> 
</foo> 

Quindi effettuare le seguenti operazioni:

XmlNode node = doc.ImportNode(FooNode.SelectSingleNode("foo"), true); 
xmlElement.AppendChild(node); 

Speranza che aiuta qualcuno