次の方法で共有


XML ツリーからの要素、属性、およびノードの削除

更新 : November 2007

要素、属性、およびその他の種類のノードを削除して、XML ツリーを変更できます。

1 つの要素または 1 つの属性は XML ドキュメントから簡単に削除できます。一方、要素または属性のコレクションを削除する場合は、まずコレクションをリストに具体化し、そのリストから要素または属性を削除する必要があります。最適な方法は、これを自動的に行う Remove 拡張メソッドを使用することです。

このような方法でコレクションの削除を実行する主な理由は、XML ツリーから取得するコレクションのほとんどが遅延実行を使用して生成されるからです。最初にコレクションをリストに具体化せず、拡張メソッドも使用しない場合、特定の種類のバグが発生する可能性があります。詳細については、「宣言型コードと命令型コードの混在のバグ (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

ソース コレクション内のすべての属性または要素をその親要素から削除します。

説明

この例では、要素を削除する 3 つの方法を示します。まず、1 つの要素を削除します。次に、要素のコレクションを取得し、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)