ImportNode メソッドを使用すると、ある XmlDocument から別の XmlDocument へ、ノードまたはノードのサブツリー全体をコピーできます。この呼び出しから返されるノードはソース ドキュメントからのノードのコピーで、属性値、ノード名、ノード タイプが含まれます。さらに、名前空間に関連するすべての属性、たとえばプリフィックス、ローカル名、名前空間 URI なども含まれます。ソース ドキュメントは変更されません。インポートしたノードは、ノードを挿入するメソッドの 1 つを使用してツリーに追加する必要があります。
新しいドキュメントにノードを追加すると、その新しいドキュメントがそのノードを所有します。これは、ノードが別のドキュメント フラグメントに作成される場合でも、各ノードの作成時には所有元のドキュメントが設定されるためです。これは DOM の要件であり、XmlDocument クラスの設計時の仕様によって決められている動作です。たとえば CreateElement は、新しいノードを作成する唯一の方法です。
インポートされたノードのタイプと deep パラメータの値によって、必要に応じて追加情報がコピーされます。あるドキュメントから別のドキュメントへ XML ソースまたは HTML ソースのフラグメントをコピーした場合、XML では 2 つのドキュメントの DTD が異なることがあるため、このメソッドではその可能性を考慮して必要な動作の再現を試みます。
インポートできるノード タイプについて、それぞれに固有の動作を次の表に示します。
ノード タイプ | deep パラメータが true | deep パラメータが false |
---|---|---|
XmlAttribute | XmlAttribute では、XmlAttribute.Specified プロパティが true に設定されます。ソース XmlAttribute の子孫は再帰的にインポートされます。結果として得られるノードは再アセンブルされ、対応するサブツリーが形成されます。 | XmlAttribute ノードは常に子ノードと共にインポートされるため、XmlAttribute ノードには deep パラメータは適用されません。 |
XmlCDataSection | ノードをそのデータと共にコピーします。 | ノードをそのデータと共にコピーします。 |
XmlComment | ノードをそのデータと共にコピーします。 | ノードをそのデータと共にコピーします。 |
XmlDocumentFragment | ソース ノードの子孫が再帰的にインポートされます。結果として得られるノードは再アセンブルされ、対応するサブツリーが形成されます。 | 空の XmlDocumentFragment が作成されます。 |
XmlDocumentType | ノードがデータと共にコピーされます。* | ノードがデータと共にコピーされます。* |
XmlElement | ソース要素の子孫が再帰的にインポートされます。結果として得られるノードは再アセンブルされ、対応するサブツリーが形成されます。
メモ 既存の属性はコピーされません。インポートされるドキュメントでこの要素名に対する既定の属性が定義されている場合は、それらが割り当てられます。 |
指定された属性ノードがソース要素からインポートされ、生成された XmlAttribute ノードが新しい要素に追加されます。子孫ノードはコピーされません。
メモ 既存の属性はコピーされません。インポートされるドキュメントでこの要素名に対する既定の属性が定義されている場合は、それらが割り当てられます。 |
XmlEntityReference | ソース ドキュメントとターゲット ドキュメントではエンティティの定義が異なる可能性があるため、このメソッドは XmlEntityReference ノードだけをコピーします。置換テキストは含まれません。インポート先のドキュメントに同じエンティティが定義されている場合は、その値が割り当てられます。 | ソース ドキュメントとターゲット ドキュメントではエンティティの定義が異なる可能性があるため、このメソッドは XmlEntityReference ノードだけをコピーします。置換テキストは含まれません。インポート先のドキュメントに同じエンティティが定義されている場合は、その値が割り当てられます。 |
XmlProcessingInstruction | インポートされたノードから、ターゲットおよびデータの値がコピーされます。 | インポートされたノードから、ターゲットおよびデータの値がコピーされます。 |
XmlText | ノードをそのデータと共にコピーします。 | ノードをそのデータと共にコピーします。 |
XmlSignificantWhitespace | ノードをそのデータと共にコピーします。 | ノードをそのデータと共にコピーします。 |
XmlWhitespace | ノードをそのデータと共にコピーします。 | ノードをそのデータと共にコピーします。 |
XmlDeclaration | インポートされたノードから、ターゲットおよびデータの値がコピーされます。 | インポートされたノードから、ターゲットおよびデータの値がコピーされます。 |
その他のすべてのノード タイプ | これらのノード タイプはインポートできません。 | これらのノード タイプはインポートできません。 |
*メモ DocumentType ノードはインポートできますが、1 つのドキュメントには 1 つの DocumentType しか存在できません。したがって、ドキュメント タイプをインポートした場合は、それをツリーに挿入する前に、ドキュメントにドキュメント タイプが存在しないことを確認する必要があります。ノードの削除については、「XML ドキュメントからのノード、コンテンツ、値の削除」を参照してください。