c# - 如何选择不同的 xml 节点

标签 c# xml xmlnode

如何在 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/

相关文章:

C# 简单 HTTP 服务器不向浏览器发送响应

c# - Xamarin-ios 小部件无法加载

java - Android 按钮宽度为可用宽度的一半 - 布局

xml - 如何使用 XSLT 1.0 查找 XML 节点的存在

c# - 在 C# 中,如何将 XmlNode 转换为带有缩进的字符串? (没有循环)

c# - 如何测试 XML 元素内部是否有文本元素?

c# - 关于visual studio Express 2008速成版高级编译器设置的问题

c# - 禁用/启用表单时 ToolStripButton 仍然突出显示

ruby - 遍历xml结构判断某个文本节点是否存在

c# - 将 C# 2.0 System.Data.SqlTypes.SqlXml 对象转换为 System.Xml.XmlNode