我有一个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 :(得分: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();