更新:November 2007
可以修改 XML 树,移除元素、属性和其他类型的节点。
从 XML 文档中移除单个元素或单个属性的操作非常简单。 但是,若要移除多个元素或属性的集合,则应首先将一个集合具体化为一个列表,然后从该列表中删除相应元素或属性。 最好的方法是使用 Remove 扩展方法,该方法可以实现此操作。
这么做的主要原因在于,从 XML 树检索的大多数集合都是用延迟执行生成的。 如果不首先将集合具体化为列表,或者不使用扩展方法,则可能会遇到某类 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 中移除。