Come posso aggiungere un documento XML a un nodo xml in C#?Aggiungi un documento xml a un nodo xml in C#?
risposta
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);
Forse in questo modo:
XmlNode node = ...... // belongs to targetDoc (XmlDocument)
node.AppendChild(targetDoc.ImportNode(xmlDoc.DocumentElement));
Marc
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
Sì, sembra che sia necessario chiamare ImportNode, ma che * creerà * una copia del documento Xml ..... –
Sì:
XmlNode imported = targetNode.OwnerDocument.ImportNode(otherDocument.DocumentElement, true);
targetNode.AppendChild(imported);
Credo che questo crea un clone del documento però.
Una volta ottenuto il nodo radice del documento XML in questione, è possibile aggiungerlo come nodo figlio del nodo in questione. Ha senso?
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
ah sì, ma cos'è xSrcNode? Perché viene visualizzato il messaggio di errore: Impossibile importare nodi di tipo "Documento". Che tipo è xTargetNode? – fijiaaron
@fijiaaron È necessario selezionare l'elemento root dal doc: 'XmlNode xChildNode = xSrcNode.ImportNode (xImportDoc.DocumentElement, true);' – nmat
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);' –