gpt4 book ai didi

C# Xml 分组以获得更好的可视化效果

转载 作者:太空宇宙 更新时间:2023-11-03 15:32:27 25 4
gpt4 key购买 nike

我有这个 xml

<Group>
<Day name="Mo">
<title>Foo</title>
</Day>
<Day name="Tu">
<title>Foo</title>
<title>Bar</title>
</Day>
<Day name="We">
<title>Foo</title>
</Day>
<Day name="Su">
<title>Foo</title>
</Day>
</Group>

我想用这种方式转换这个 xml

<Group>
<Day name="Mo,Tu,We,Th,Su"> <!-- notice the repetition of tuesday -->
<title>Foo</title>
</Day>
<Day name="Tu">
<title>Bar</title>
</Day>
</Group>

使用 LINQ to XML 获得更好的可视化效果。我知道这两个 xml 从逻辑上讲是不一样的,但我已经实现了我的系统而不关心它。

我一直在尝试使用此 LINQ 查询对元素进行分组

var grp = from d in source.Element("Grp").Elements("Day")
group d by new { name = d.Attribute("name"), value = d.Elements("title")
into g
select g;

但我注意到我获得的 xml 与我开始使用的 xml 有点相同。

关于如何执行此操作的任何想法?

最佳答案

您是按姓名和头衔分组的,因此您获得的唯一唯一组是您已经拥有的组。

您需要按标题对您的名字进行分组,然后您最终会得到包含一堆具有相同标题的名字的分组。

var groupings = from day in doc.Descendants("Day")
let name = (string)day.Attribute("name")
from title in day.Elements("title")
group name by title.Value;

然后您可以使用这些来创建一些新元素:

var elements = from grouping in groupings
let title = grouping.Key
let names = string.Join(",", grouping)
select new XElement("Day",
new XAttribute("name", names),
new XElement("title", title)
);

然后为这些元素创建一个新的容器:

var result = new XDocument(
new XElement("Group",
elements
)
);

您可以在 this fiddle 中查看工作示例.

关于C# Xml 分组以获得更好的可视化效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33343034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com