首页 > 解决方案 > LINQ 计数具有倍数的 XML 元素

问题描述

这里有点问题,也许是因为我累了,我很难用文字来解释我的问题,但我想要的基本上是一个 group by,除了 XML 元素可以有多个相同类型的元素. 我正在尝试在 C# 中使用 LINQ 示例:我有这个 XML

<?xml version="1.0" encoding="utf-8"?>
<test>
    <test1>
        <test2>1</test2>
    </test1>
    <test1>
        <test2>2</test2>
    </test1>
    <test1>
        <test2>1</test2>
        <test2>3</test2>
        <test2>4</test2>
    </test1>
    <test1>
        <test2>1</test2>
        <test2>2</test2>
    </test1>
    <test1>
        <test2>5</test2>
    </test1>
</test>

我想计算有多少 test1 元素有一个值为 1、2 等的 test2 元素,所以输出应该是这样的:

1:3
2:2
3:1
4:1
5:1

但我似乎无法让程序在给定 test1 元素中的第一个元素之后关心 test2 元素。另外,第一次在这里发帖,所以如果我搞砸了,对我来说很轻松

标签: c#xmllinqgroup-bycount

解决方案


Console.WriteLine(string.Join("\n", test.XPathSelectElements("//test2")
    .GroupBy(x => x.Value, (k, g) => $"{k}: {g.Count()}")
));

推荐阅读