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 文档中删除节点、内容和值。