Копирование существующих узлов из одного документа в другойCopying Existing Nodes from One Document to Another

Метод ImportNode позволяет скопировать узел или целое поддерево узлов из одного документа XmlDocument в другой.The ImportNode method is the mechanism by which a node or entire node subtree is copied from one XmlDocument to another. Узел, возвращенный после вызова, является копией узла из исходного документа, включая значения атрибутов, имя узла, тип узла и все атрибуты, связанные с пространством имен, такие как префикс, локальное имя и URI пространства имен.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. После импорта узла его необходимо добавить к дереву с помощью одного из методов, используемых для вставки узлов.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. Это требование объектной модели DOM XML-документа, которое обусловлено структурой создания фабрики в классе 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 или HTML копируется из одного документа в другой, с учетом того факта, касающегося XML, что два документа могут иметь различные определения типа документа (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. Параметр deep не применяется к узлам XmlAttribute, так как вместе с ними всегда импортируются дочерние узлы.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 можно импортировать, у документа может быть только один узел 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