如何根据内部值比较删除 XML 节点

发布于 2024-12-07 20:30:12 字数 602 浏览 1 评论 0原文

我有一个具有以下结构的 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>
...

XXX 等于 <时,我想删除节点 来自 C# 应用程序的 code>YYY。我尝试过使用 linq 和其他一些方式,但我无法比较这些内部值,然后在必要时删除父节点。

预先非常感谢!

I have an XML file with the following structure:

<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>
...

And I would like to delete the node <tu> when <seg>XXX</seg> is equal to <seg>YYY</seg> from a C# application. I have tried with linq and in some other ways, but I wasn't able to compare those internal valuea and then delete the parent node if necessary.

Thanks a lot in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半﹌身腐败 2024-12-14 20:30:12

首先,您的 XML 无效,因此我添加了一个 节点 - 然后这对我有用:

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();

First of all your XML is invalid so I added a <root> node - then this worked for me:

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();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文