共用方式為


從 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.RemoveAll

XElement 移除內容和屬性。

XElement.RemoveAttributes

移除 XElement 的屬性。

XElement.SetAttributeValue

如果您針對值傳遞 null,則會移除屬性。

XElement.SetElementValue

如果您針對值傳遞 null,則會移除子項目。

XNode.Remove

從其父代移除 XNode

Extensions.Remove

從其父項目移除來源集合中的每個屬性或項目。

範例

描述

這個範例會示範三種移除項目的方法。首先,它會移除單一項目。接著,它會反覆運算項目的集合,使用 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 移除。

請參閱

其他資源

修改 XML 樹狀結構 (LINQ to XML)