【C#】LINQ to XML 消すだけでもなかなか苦労した話

XMLファイルの操作の中で、要素の削除にわりと手間取った。

試行錯誤した結果、以下のコードでやりたいことが実現した。


〇削除したいXML

<?xml version="1.0" encoding="utf-8" ?>
<Root>
  <TestElement>TEST</TestElement>
</Root>

〇プログラム

    public static void DeleteElement()
    {        
        XDocument xmlDoc = XDocument.Load(”File”);

        var query = from y in xmlDoc.Descendants("Root")
                         select y;


        query2.Elements("TestElement").Remove();     ///☆
        xmlDoc.Save(”File");
    }

〇結果

<?xml version="1.0" encoding="utf-8" ?>
<Root></Root>


☆印のquery2.Elementsがミソで、Rootの中の要素を全て読み込んでいる。
その要素たちをRemove()で消している。
いままでクエリをforeachで回し、要素を順番に消そうとしていたがなぜか途中でエラーを吐いて止まるので困っていた。
ようやく有効な手立てが見つかってよかったのだ。