ドキュメント間での既存のノードのコピーCopying Existing Nodes from One Document to Another

ImportNode メソッドを使用すると、ある XmlDocument から別の XmlDocument へ、ノードまたはノードのサブツリー全体をコピーできます。The ImportNode method is the mechanism by which a node or entire node subtree is copied from one XmlDocument to another. 呼び出しから返されるノードは、ソース ドキュメントのノードのコピーであり、そこには属性値、ノード名、ノード型が含まれます。さらに、プレフィックス、ローカル名、名前空間 URI (Uniform Resource Identifier) など、名前空間に関連するすべての属性も含まれます。The node returned from the call is a copy of the node from the source document, including attribute values, the node name, node type, and all namespace-related attributes such as the prefix, local name, and namespace Uniform Resource Identifier (URI). ソース ドキュメントは変更されません。The source document is not changed. インポートしたノードは、ノードを挿入するメソッドの 1 つを使用してツリーに追加する必要があります。After you have imported the node, you still have to add it to the tree using one of the methods used to insert nodes.

新しいドキュメントにノードを追加すると、その新しいドキュメントがそのノードを所有します。When the node is attached to its new document, the new document owns the node. これは、ノードが別のドキュメント フラグメントに作成される場合でも、各ノードの作成時には所有元のドキュメントが設定されるためです。The reason is that each node, when created, has an owning document, even if the nodes are created in separate document fragments. これは XML ドキュメント オブジェクト モデル (DOM) の要件であり、XmlDocument クラスの設計仕様です。This is a requirement of the XML Document Object Model (DOM) and is enforced by the factory creation design on the XmlDocument class. たとえば、CreateElement は、新しいノードを作成する唯一の手段です。For example, CreateElement, is the only way to create new nodes.

インポートされたノード型と deep パラメーターの値によって、必要に応じて追加情報がコピーされます。Depending on the node type of the imported node and the value of the deep parameter, additional information is copied as appropriate. XML では、あるドキュメントから別のドキュメントへ XML ソースまたは HTML ソースのフラグメントをコピーしたときに 2 つのドキュメントのドキュメント型定義 (DTD) が別々になることがありますが、このメソッドでは、その動作を再現しようとします。This method attempts to mirror the behavior expected if a fragment of XML or HTML source was copied from one document to another, accounting for the fact that for XML, the two documents may have different document type definitions (DTDs).

インポートできるノードの型について、それぞれに固有の動作を次の表に示します。The following table describes the specific behavior for each type of node that can be imported.

ノード型Node Type deep パラメーターが truedeep parameter is true deep パラメーターが falsedeep parameter is false
XmlAttributeXmlAttribute Specified は XmlAttribute で true に設定されています。The Specified is set to true on the XmlAttribute. ソース XmlAttribute の子孫は再帰的にインポートされます。結果として得られるノードは再アセンブルされ、対応するサブツリーが形成されます。The descendants of the source XmlAttribute are recursively imported and the resulting nodes reassembled to form the corresponding subtree. XmlAttribute ノードは常に子ノードと共にインポートされるため、XmlAttribute ノードには deep パラメーターは適用されません。The deep parameter does not apply to XmlAttribute nodes, because they always carry their child nodes with them when imported.
XmlCDataSectionXmlCDataSection ノードをそのデータと共にコピーします。Copies the node, including its data. ノードをそのデータと共にコピーします。Copies the node, including its data.
XmlCommentXmlComment ノードをそのデータと共にコピーします。Copies the node, including its data. ノードをそのデータと共にコピーします。Copies the node, including its data.
XmlDocumentFragmentXmlDocumentFragment ソース ノードの子孫が再帰的にインポートされます。結果として得られるノードは再アセンブルされ、対応するサブツリーが形成されます。The descendants of the source node are recursively imported and the resulting nodes reassembled to form the corresponding subtree. 空の XmlDocumentFragment が作成されます。An empty XmlDocumentFragment is created.
XmlDocumentTypeXmlDocumentType ノードがデータと共にコピーされます。*Copies the node, including its data.* ノードがデータと共にコピーされます。*Copies the node, including its data.*
XmlElementXmlElement ソース要素の子孫が再帰的にインポートされます。結果として得られるノードは再アセンブルされ、対応するサブツリーが形成されます。The descendants of the source element are recursively imported and the resulting nodes reassembled to form the corresponding subtree. 注: 既定の属性はコピーされません。Note: Default attributes are not copied. インポートされるドキュメントでこの要素名に対する既定の属性が定義されている場合は、それらが割り当てられます。If the document being imported into defines default attributes for this element name, those are assigned. 指定された属性ノードがソース要素からインポートされ、生成された XmlAttribute ノードが新しい要素に追加されます。Specified attribute nodes of the source element are imported, and the generated XmlAttribute nodes are attached to the new element. 子孫ノードはコピーされません。The descendant nodes are not copied. 注: 既定の属性はコピーされません。Note: Default attributes are not copied. インポートされるドキュメントでこの要素名に対する既定の属性が定義されている場合は、それらが割り当てられます。If the document being imported into defines default attributes for this element name, those are assigned.
XmlEntityReferenceXmlEntityReference ソース ドキュメントとターゲット ドキュメントではエンティティの定義が異なる可能性があるため、このメソッドは XmlEntityReference ノードだけをコピーします。Because the source and destination documents could have the entities defined differently, this method only copies the XmlEntityReference node. 置換テキストは含まれません。The replacement text is not included. インポート先のドキュメントに同じエンティティが定義されている場合は、その値が割り当てられます。If the destination document has the entity defined, its value is assigned. ソース ドキュメントとターゲット ドキュメントではエンティティの定義が異なる可能性があるため、このメソッドは XmlEntityReference ノードだけをコピーします。Because the source and destination documents could have the entities defined differently, this method only copies the XmlEntityReference node. 置換テキストは含まれません。The replacement text is not included. インポート先のドキュメントに同じエンティティが定義されている場合は、その値が割り当てられます。If the destination document has the entity defined, its value is assigned.
XmlProcessingInstructionXmlProcessingInstruction インポートされたノードから、ターゲットおよびデータの値がコピーされます。Copies the target and data value from the imported node. インポートされたノードから、ターゲットおよびデータの値がコピーされます。Copies the target and data value from the imported node.
XmlTextXmlText ノードをそのデータと共にコピーします。Copies the node, including its data. ノードをそのデータと共にコピーします。Copies the node, including its data.
XmlSignificantWhitespaceXmlSignificantWhitespace ノードをそのデータと共にコピーします。Copies the node, including its data. ノードをそのデータと共にコピーします。Copies the node, including its data.
XmlWhitespaceXmlWhitespace ノードをそのデータと共にコピーします。Copies the node, including its data. ノードをそのデータと共にコピーします。Copies the node, including its data.
XmlDeclarationXmlDeclaration インポートされたノードから、ターゲットおよびデータの値がコピーされます。Copies the target and data value from the imported node. インポートされたノードから、ターゲットおよびデータの値がコピーされます。Copies the target and data value from the imported node.
その他のすべてのノード型All other node types これらのノード型はインポートできません。These node types cannot be imported. これらのノード型はインポートできません。These node types cannot be imported.

注意

DocumentType ノードはインポートできますが、1 つのドキュメントは 1 つの DocumentType しか持てません。Although DocumentType nodes can be imported, a document can only have one DocumentType. したがって、ドキュメント型をインポートした場合は、それをツリーに挿入する前に、ドキュメント内にドキュメント型がないことを確認する必要があります。So, once you have imported the document type, before inserting it into tree you have to make sure that there is no document type in the document. ノードの削除については、「XML ドキュメントからのノード、コンテンツ、値の削除」を参照してください。For information on removing nodes, see Removing Nodes, Content, and Values from an XML Document.

関連項目See also