Как удалить узлы XML на основе сравнения внутренних значений - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть 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>
...

И я хотел бы удалить узел <tu>, когда <seg>XXX</seg> равен <seg>YYY</seg> из приложения C #.Я пробовал с linq и некоторыми другими способами, но я не смог сравнить эти внутренние значенияa и затем удалить родительский узел, если необходимо.

Заранее большое спасибо!

1 Ответ

1 голос
/ 30 сентября 2011

Прежде всего, ваш 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...