如何基于内部值比较删除XML节点

时间:2011-09-30 15:25:07

标签: c# linq-to-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以及其他一些方法,但我无法比较这些内部值,然后在必要时删除父节点。

提前多多感谢!

1 个答案:

答案 0 :(得分: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();