2016-08-05 96 views
0

我不明白XmlDocumentFragmentXmlNode之間的區別。.Net中XmlDocumentFragment和XmlNode之間的差異

我知道第一個是第二個派生類型。

爲什麼使用XmlDocumentFragment創建或編輯代碼中的XmlDocument的節點會更好?

+0

順便說一句,如果可以的話,使用'XDocument''而不是'XmlDocument'將會有更好的體驗。 –

回答

2

我找到答案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'你可以處理同胞的節點。 –

相關問題