XML ツリーからの要素、属性、およびノードの削除
要素、属性、およびその他の種類のノードを削除して、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 から削除します。 |
|
XElement の属性を削除します。 |
|
null を値に受け取ると、属性を削除します。 |
|
null を値に受け取ると、子要素を削除します。 |
|
XNode をその親から削除します。 |
|
ソース コレクション内のすべての属性または要素をその親要素から削除します。 |
例
説明
この例では、要素を削除する 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 から削除されています。