.Net中XmlDocumentFragment和XmlNode之间的差异

问题描述:

我不明白XmlDocumentFragmentXmlNode之间的区别。.Net中XmlDocumentFragment和XmlNode之间的差异

我知道第一个是第二个派生类型。

为什么使用XmlDocumentFragment创建或编辑代码中的XmlDocument的节点会更好?

+0

顺便说一句,如果可以的话,使用'XDocument''而不是'XmlDocument'将会有更好的体验。 –

我找到答案here

的DocumentFragment是 “轻量级” 或 “最小” Document对象。它想要能够提取文档的一部分 树或创建文档的新片段,它很常见。想象一下,通过移动碎片 来实现 用户命令,例如剪切或重新排列文档。希望有一个可以容纳这样的片段的对象,为此目的使用节点是很自然的。 尽管Document对象可以实现此角色,但根据 的基础实现,文档对象可能是重量级对象。真正需要的是一个非常轻量级的对象。 DocumentFragment就是这样一个对象。此外,各种操作(例如将节点插入另一个节点的子节点 )可能会将DocumentFragment对象作为参数; 这会导致DocumentFragment的所有子节点都被移动到此节点的子列表中,即 。 DocumentFragment节点的子节点是零个或多个节点,代表定义文档结构的任何子树的顶点。 DocumentFragment 节点不需要是格式良好的XML文档(尽管它们的确需要遵循强制形成的XML解析的实体的规则,该实体可以具有多个顶级节点)。例如,一个 DocumentFragment可能只有一个孩子,该子节点可能是一个Text节点。这样的结构模型既不代表HTML 文档也不代表结构良好的XML文档。当文档片段插入到文档中(或实际上可能带有 孩子的任何其他节点)的文档片段为 时,DocumentFragment的孩子而不是文档片段本身的孩子被插入到节点中。这使得 DocumentFragment非常有用,当用户希望创建节点时 是兄弟姐妹; DocumentFragment充当这些节点的父节点,以便用户可以使用接口的标准方法(如insertBefore()和appendChild())。

+0

感谢您花时间回答。您引用的文字认为,“XmlDocumentFragment”更适合将“XmlDocument”用于“大”xml操作。但我仍然不明白为什么它比'XmlNode'更好。也许有一些很简单,我不明白... –

+0

@SylvainB。 'XmlDocument'是'XmlNode'的子类型https://msdn.microsoft.com/en-us/library/system.xml.xmldocument(v=vs.110).aspx所以,它们非常常见,并且'XmlDocumentFragment'在某些情况下比'XmlDocument'和'XmlNode'更好 – Backs

+0

ok。我问这个问题是因为使用属性'XmlNode.InnerXml',你可以构建一个完整的复杂节点并将其插入'XmlDocument'中。我想我的问题的答案是在你的答案的结尾:用'XmlDocumentFragment'你可以处理同胞的节点。 –