2012-05-09 13 views
0

次のフラグメントは、 "JOSE"を含む "Name"要素を含む "DpsRecord"要素を削除します。しかし、私はどのようにルートにLinqクエリを適用し、dpsRecords(クエリの左側)を取得してからdpsRecordsを削除した後、どの要素がルートでも削除されることを理解していません。LinqからXMLへのノードの削除方法

XElement root = XElement.Load("input.xml"); 
IEnumerable<XElement> dpsRecords = from elem in 
         root.Elements("DpsRecord") 
         where (((string)elem.Element("Name")).Contains("JOSE"))    
         select elem; 
foreach (XElement elem in dpsRecords) 
{ 
    elem.Remove(); 
} 
root.Save("output.xml"); 

答えて

2

よく、削除メソッドhttp://msdn.microsoft.com/en-us/library/system.xml.linq.xnode.remove.aspxは、親ノードから呼び出されたノードを削除します。

また、foreachを必要としないことに注意してください。dspRecords.Remove()を実行できます。

+0

確かに、クエリを適用した後、 "ルート"(XElement変数)のサブセットであるdpsRecordsでノードが削除されていることを理解しています。あなたには明らかですが、dpsRecordsでの削除がルートでの削除をどのようにして行うのでしょうか。 – MicMit

+0

コードで使用するRemoveメソッドとリンクして、ノードを親ノードから削除し、IEnmerableから削除しません。だから私はあなたの問題が表示されません、メソッドは、そのドキュメントが何を言うか、つまり、ノードを親ノードから削除します。これは、サンプルコードの 'ルート' XElementノードです。つまり、 'IEnumerable 'や 'XElement []'や 'List 'を持っていても、XElementでそのRemoveメソッドを呼び出すと、XElementは親ノードから削除され、列挙するコレクションからは削除されません。 –

関連する問題