2011-09-30 52 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