從 XML 樹狀結構移除項目、屬性和節點
更新: November 2007
您可以修改 XML 樹狀結構以移除項目、屬性以及其他類型的節點。
從 XML 文件移除單一項目或單一屬性很直接。不過,移除項目或屬性的集合時,您應該先將集合具體化到清單中,然後從清單中刪除項目或屬性。最好的方法是,使用 Remove 擴充方法替您執行。
這麼做的主要原因是因為您從 XML 樹狀結構中擷取的大部分集合都是使用延後執行產生的。如果您沒有先將這些集合具體化到清單中,或沒有使用擴充方法,則可能發生特定類別的 Bug。如需詳細資訊,請參閱混合的宣告式程式碼/命令式程式碼 Bug (C#) (LINQ to XML)。
下列方法會從 XML 樹狀結構移除節點和屬性。
方法 |
描述 |
---|---|
[M:System.Xml.Linq.XAttribute.Remove()] |
從其父代移除 XAttribute。 |
[M:System.Xml.Linq.XContainer.RemoveNodes()] |
從 XContainer 移除子節點。 |
從 XElement 移除內容和屬性。 |
|
移除 XElement 的屬性。 |
|
如果您針對值傳遞 null,則會移除屬性。 |
|
如果您針對值傳遞 null,則會移除子項目。 |
|
從其父代移除 XNode。 |
|
從其父項目移除來源集合中的每個屬性或項目。 |
範例
描述
這個範例會示範三種移除項目的方法。首先,它會移除單一項目。接著,它會反覆運算項目的集合,使用 Enumerable.ToList<TSource> 運算子具體化它們,然後移除集合。最後,它會擷取項目的集合,並使用 Remove 擴充方法加以移除。
如需有關 ToList<TSource> 運算子的詳細資訊,請參閱轉換資料型別。
程式碼
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 移除。