從 XML 樹狀結構中移除項目、屬性和節點 (LINQ to XML)
您可以修改 XML 樹狀以移除項目、屬性以及其他類型的節點。
從 XML 文件移除單一項目或單一屬性很直接。 不過,移除項目或屬性的集合時,您應該先將集合具體化到清單中,然後從清單中刪除項目或屬性。 最好的方法是使用 Remove 擴充方法執行此動作。
使用此方法的主要原因是因為您從 XML 樹狀結構中擷取的大部分集合都是使用延後執行產生的。 如果您沒有先將這些集合具體化到清單中,或沒有使用擴充方法,則可能發生特定類別的錯誤。 如需詳細資訊,請參閱混合的宣告式/命令式程式碼錯誤。
下列方法會從 XML 樹狀移除節點和屬性。
方法 | 描述 |
---|---|
XAttribute.Remove | 從其父代移除 XAttribute。 |
XContainer.RemoveNodes | 從 XContainer 移除子節點。 |
XElement.RemoveAll | 從 XElement 移除內容和屬性。 |
XElement.RemoveAttributes | 移除 XElement 的屬性。 |
XElement.SetAttributeValue | 如果您傳遞 null 值,請移除屬性。 |
XElement.SetElementValue | 如果您傳遞 null 值,請移除子項目。 |
XNode.Remove | 從其父代移除 XNode。 |
Extensions.Remove | 從其父元素移除來源集合中的每個屬性或元素。 |
範例:移除單一元素,並以兩種方式移除元素的集合
這個範例會示範三種移除項目的方法。 首先,它會移除單一項目。 接著,它會擷取元素的集合,使用 Enumerable.ToList 運算子具體化它們,然後移除集合。 最後,它會擷取項目的集合,並使用 Remove 擴充方法加以移除。
如需 ToList 運算子的詳細資訊,請參閱轉換資料類型 (C#) 和轉換資料類型 (Visual Basic)。
XElement root = XElement.Parse(@"<Root>
<Child1>
<GrandChild1/>
<GrandChild2/>
<GrandChild3/>
</Child1>
<Child2>
<GrandChild4/>
<GrandChild5/>
<GrandChild6/>
</Child2>
<Child3>
<GrandChild7/>
<GrandChild8/>
<GrandChild9/>
</Child3>
</Root>");
root.Element("Child1").Element("GrandChild1").Remove();
root.Element("Child2").Elements().ToList().Remove();
root.Element("Child3").Elements().Remove();
Console.WriteLine(root);
Dim root As XElement = _
<Root>
<Child1>
<GrandChild1/>
<GrandChild2/>
<GrandChild3/>
</Child1>
<Child2>
<GrandChild4/>
<GrandChild5/>
<GrandChild6/>
</Child2>
<Child3>
<GrandChild7/>
<GrandChild8/>
<GrandChild9/>
</Child3>
</Root>
root.<Child1>.<GrandChild1>.Remove()
root.<Child2>.Elements().ToList().Remove()
root.<Child3>.Elements().Remove()
Console.WriteLine(root)
這個範例會產生下列輸出:
<Root>
<Child1>
<GrandChild2 />
<GrandChild3 />
</Child1>
<Child2 />
<Child3 />
</Root>
第一個子系元素已從 Child1
中移除,且所有子系元素都已從 Child2
和 Child3
中移除。