2011-09-30 47 views
0

我有以下結構的XML文件中刪除XML節點:如何基於內部值比較

<tu> 
    <tuv xml:lang="EN"> 
     <seg>XXX</seg> 
    </tuv> 
    <tuv xml:lang="FR"> 
     <seg>YYY</seg> 
    </tuv> 
</tu> 
<tu> 
    <tuv xml:lang="EN"> 
     <seg>XXX</seg> 
    </tuv> 
    <tuv xml:lang="FR"> 
     <seg>YYY</seg> 
    </tuv> 
</tu> 
... 

而且我想從C#應用程序中刪除節點<tu><seg>XXX</seg>等於<seg>YYY</seg> 。我用linq和其他方式嘗試過,但我無法比較這些內部值,然後在必要時刪除父節點。

非常感謝!

+0

你嘗試什麼LINQ代碼? – ChrFin

+0

我曾嘗試在其他類似的問題在這裏找到linq代碼(如http://stackoverflow.com/questions/919645/how-to-delete-node-from-xml-file-using-c/919687#919687)。我遇到的問題是,所有示例都顯示如何查詢,選擇和刪除,但我找不到任何內容也比較的內容... – marynarz

回答

1

所有的XML首先是無效的,所以我說一個<root>節點 - 那麼這個工作對我來說:

XDocument doc = XDocument.Load("test.xml"); 

var nodesWithMatchingElements = doc.Root.Elements("tu") 
            .GroupBy(e => e) 
            .Select(g => new 
            { 
             Element = g.Key, 
             Count = g.Descendants("seg").Select(x => x.Value).Distinct().Count() 
            }) 
            .Where(x => x.Count == 1); 

foreach (var node in nodesWithMatchingElements) 
    node.Element.Remove(); 
+0

哇,它效果很好。非常感謝! – marynarz