如何在 C# 中获取 XML 中的不同节点列表
例如
<root>
<node1 ss="d1" ff="f1" gg="h1"/>
<node1 ss="d1" ff="f2" gg="h1"/>
<node1 ss="d1" ff="f1" gg="h1"/>
<node1 ss="d2" ff="f1" gg="h1"/>
<node1 ss="d1" ff="f1" gg="h1"/>
<node1 ss="d1" ff="f1" gg="h1"/>
<node1 ss="d2" ff="f1" gg="h1"/>
<node1 ss="d1" ff="f2" gg="h1"/>
</root>
在这个 XML 中,我将采用不同的节点 并制作这个 xml
<root>
<node1 ss="d1" ff="f1" gg="h1"/>
<node1 ss="d1" ff="f2" gg="h1"/>
<node1 ss="d2" ff="f1" gg="h1"/>
</root>
这个 xml 不是真实的示例,我在全局模式下为 xml 中的任何结构寻找解决方案
最佳答案
您可以通过多种方式做到这一点;例如,xslt 中的 Muenchian 分组。但在 C# 中,如果 xml 布局已知且固定,那么最简单的可能是:
var root = XElement.Parse(xml);
var newRoot = new XElement("root",
root.Elements("node1").Select(el =>
new {
ss = (string)el.Attribute("ss"),
ff = (string)el.Attribute("ff"),
gg = (string)el.Attribute("gg"),
}).Distinct().Select(obj =>
new XElement("node1",
new XAttribute("ss", obj.ss),
new XAttribute("ff", obj.ff),
new XAttribute("gg", obj.gg))));
如果您需要更灵活的东西,IEqualityComparer<XElement>
(与 .Distinct()
一起使用)会更有值(value)。
关于c# - 如何选择不同的 xml 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2582640/