Copiando nós existentes de um documento para outro
O método ImportNode é o mecanismo pelo qual um nó ou uma subárvore inteira do nó são copiados de um XmlDocument para outro. O nó retornado de chamada é uma cópia do nó do documento de origem, incluindo valores de atributo, nome de nó, tipo de nó, e todos os atributos URL relacionados como o prefixo, o nome local, e namespace Uniform Resource Identifier (URI). O documento de origem não é alterado. Depois que você importou o nó, você ainda precisará adicioná-lo à árvore usando um dos métodos usados para nós de inserção.
Quando o nó é anexado ao novo documento, o novo documento possui o nó. O motivo é que cada nó, quando criado, tem um documento proprietário, mesmo se os nós são criados em partes separados do documento. Esse é um requisito do DOM (Modelo de Objeto do Documento) e é imposto pelo design de criação de fábrica na classe XmlDocument. Por exemplo, CreateElement é a única maneira de criar novos nós.
Dependendo do tipo do nó importado e do valor do parâmetro deep, informações adicionais são copiadas conforme apropriado. Este método tenta espelhar o comportamento esperado se um fragmento XML ou de código HTML foi copiado de um documento para outro, responsabilizando-se pelo fato que para XML, os dois documentos pode ter definições de tipos diferentes (DTDs) do documento.
A tabela a seguir descreve o comportamento específico para cada tipo de nó que pode ser importado.
Tipo de nó | O parâmetro deep é true | O parâmetro deep é false |
---|---|---|
XmlAttribute | O Specified é definido como true no XmlAttribute. Os descendentes da origem XmlAttribute são importados recursivamente, e os nós resultantes são remontados para formar a subárvore correspondente. | O parâmetro deep não se aplica a nós XmlAttribute, pois eles sempre levam seus filhos quando importados. |
XmlCDataSection | Copia o nó, incluindo seus dados. | Copia o nó, incluindo seus dados. |
XmlComment | Copia o nó, incluindo seus dados. | Copia o nó, incluindo seus dados. |
XmlDocumentFragment | Os descendentes nó de origem recursivamente serão importados e os nós resultantes são remontados para formar a subárvore correspondente. | Um XmlDocumentFragment vazio é criado. |
XmlDocumentType | Copia o nó, incluindo seu data.* | Copia o nó, incluindo seu data.* |
XmlElement | Os descendentes do elemento de origem recursivamente serão importados e os nós resultantes são remontados para formar a subárvore correspondente. Observação: os atributos padrão não são copiados. Se o documento que está sendo importado define atributos padrão para este nome de elemento, esses são atribuídos. | Os nós de atributo especificados do elemento de origem são importados, e os nós XmlAttribute gerados são anexados ao novo elemento. Os nós descendentes não são copiados. Observação: os atributos padrão não são copiados. Se o documento que está sendo importado define atributos padrão para este nome de elemento, esses são atribuídos. |
XmlEntityReference | Como os documentos de origem e destino podem ter as entidades definidas de maneira diferente, esse método copia somente o nó XmlEntityReference. O texto de substituição não é incluído. Se o documento de destino tem a entidade definida, o valor é atribuído. | Como os documentos de origem e destino podem ter as entidades definidas de maneira diferente, esse método copia somente o nó XmlEntityReference. O texto de substituição não é incluído. Se o documento de destino tem a entidade definida, o valor é atribuído. |
XmlProcessingInstruction | Copia o destino e o valor do nó importado. | Copia o destino e o valor do nó importado. |
XmlText | Copia o nó, incluindo seus dados. | Copia o nó, incluindo seus dados. |
XmlSignificantWhitespace | Copia o nó, incluindo seus dados. | Copia o nó, incluindo seus dados. |
XmlWhitespace | Copia o nó, incluindo seus dados. | Copia o nó, incluindo seus dados. |
XmlDeclaration | Copia o destino e o valor do nó importado. | Copia o destino e o valor do nó importado. |
Todos os outros tipos de nó | Esses tipos de nós não podem ser importados. | Esses tipos de nós não podem ser importados. |
Observação
Embora os nós de DocumentType possam ser importados, um documento pode ter apenas um DocumentType. Assim, uma vez que você importou o tipo de documento, antes de inseri-lo na árvore você precisará certificar-se que não há documento tipo no documento. Para saber mais sobre como remover nós, confira Removendo nós, conteúdo e valores de um documento XML.