将现有节点从一个文档复制到另一个文档

ImportNode 方法是将节点或整个节点子树从一个 XmlDocument 复制到另一个节点的机制。 从调用返回的节点是源文档中节点的副本,包括属性值、节点名称、节点类型和所有与命名空间相关的属性,例如前缀、本地名称和命名空间统一资源标识符(URI)。 源文档未更改。 导入节点后,仍必须使用用于插入节点的方法之一将其添加到树中。

当节点附加到其新文档时,新文档将拥有该节点。 原因是每个节点在创建时都有一个所属文档,即使节点是在不同的文档片段中创建的。 这是 XML 文档对象模型(DOM)的要求,由 XmlDocument 类上的工厂创建设计强制执行。 例如, CreateElement 是创建新节点的唯一方法。

根据导入的节点的节点类型和 深度 参数的值,会根据需要复制其他信息。 此方法旨在复制当从一个文档将XML或HTML源代码片段复制到另一个文档时预期的行为,特别是考虑到XML情况下,这两个文档可能具有不同的文档类型定义(DTDs)。

下表描述了可导入的每种节点类型的特定行为。

节点类型 deep 参数为 true deep 参数为 false
XmlAttribute Specified 属性在 XmlAttribute 上设置为 true 。 源 XmlAttribute 的后代以递归方式导入,生成的节点重新组合以形成相应的子树。 深度参数不适用于 XmlAttribute 节点,因为它们始终在导入时携带其子节点。
XmlCDataSection 复制该节点,包括复制其数据。 复制该节点,包括复制其数据。
XML注释 复制该节点,包括复制其数据。 复制该节点,包括复制其数据。
XmlDocumentFragment 源节点的后代以递归方式导入,生成的节点重新组合以形成相应的子树。 创建空的 XmlDocumentFragment
XML 文档类型 复制该节点,包括复制其数据。* 复制该节点,包括复制其数据。*
XmlElement 源元素的后代以递归方式导入,生成的节点重新组合以形成相应的子树。 注意: 不会复制默认属性。 如果要导入的文档定义此元素名称的默认属性,则分配这些属性。 导入源元素的指定属性节点,生成的 XmlAttribute 节点将附加到新元素。 这些后代节点不会被复制。 注意: 不会复制默认属性。 如果要导入的文档定义此元素名称的默认属性,则分配这些属性。
XmlEntityReference 由于源文档和目标文档的实体定义方式可能不同,因此此方法仅复制 XmlEntityReference 节点。 不包括替换文本。 如果目标文档定义了实体,则会为其分配其值。 由于源文档和目标文档的实体定义方式可能不同,因此此方法仅复制 XmlEntityReference 节点。 不包括替换文本。 如果目标文档定义了实体,则会为其分配其值。
XML处理指令 从导入的节点复制目标和数据值。 从导入的节点复制目标和数据值。
XmlText 复制该节点,包括复制其数据。 复制该节点,包括复制其数据。
XmlSignificantWhitespace 复制该节点,包括复制其数据。 复制该节点,包括复制其数据。
XmlWhitespace 复制该节点,包括复制其数据。 复制该节点,包括复制其数据。
XML声明 从导入的节点复制目标和数据值。 从导入的节点复制目标和数据值。
所有其他节点类型 无法导入这些节点类型。 无法导入这些节点类型。

注释

虽然可以导入 DocumentType 节点,但文档只能有一个 DocumentType。 因此,在导入文档类型后,将其插入到树中之前,必须确保文档中不存在任何文档类型。 有关删除节点的信息,请参阅 从 XML 文档中删除节点、内容和值

另请参阅