![](/img/trans.png)
[英]get xml attribute value of element based on another attribute using linq
[英]Deduplicate XML using LINQ based on attribute value
我有这样的XML:
<rewriteMaps>
<rewriteMap name="RewritesInSightContentaltecNL">
<add key="/tata" value="/productdetails.aspx?id=1628" />
<add key="/tata" value="/productdetails.aspx?id=1628" />
<add key="/marc" value="/productdetails.aspx?id=1626" />
<add key="/marc" value="/productdetails.aspx?id=1626" />
<add key="/marc" value="/productdetails.aspx?id=1626" />
<add key="/henk" value="/productdetails.aspx?id=162996" />
<add key="/henk" value="/productdetails.aspx?id=1aa6" />
<add key="/tata" value="/productdetails.aspx?id=1628" />
<add key="/tata" value="/productdetails.aspx?id=1628" />
<add key="/marc" value="/productdetails.aspx?id=1626" />
<add key="/marc" value="/productdetails.aspx?id=1626" />
<add key="/aaaa" value="/productdetails.aspx?id=xxxx" />
</rewriteMap>
</rewriteMaps>
我想从中删除基于“key”属性的重复值“
所以我想最终得到:
<add key="/tata" value="/productdetails.aspx?id=1628" />
<add key="/marc" value="/productdetails.aspx?id=1626" />
<add key="/henk" value="/productdetails.aspx?id=162996" />
<add key="/aaaa" value="/productdetails.aspx?id=xxxx" />
任何帮助非常感谢。
使用删除扩展方法。此方法将从文档中删除所有选定的节点。 试试这个代码。
xdoc.Root.Elements("add")
.GroupBy(s => (string)s.Element("value"))
.SelectMany(g => g.Skip(1)) // select all nodes from group except first one
.Remove();
XElement rewriteMaps = XElement.Parse(xmlToParse);
var distinct data= rewriteMaps.Descendants("rewriteMap")
.Elements()
.GroupBy(x=> new { key = (string)x.Attribute("key"), value = (string)x.Attribute("value")})
.Select(x=> x.FirstOrDefault());
这会给你
<add key="/tata" value="/productdetails.aspx?id=1628" />
<add key="/marc" value="/productdetails.aspx?id=1626" />
<add key="/henk" value="/productdetails.aspx?id=162996" />
<add key="/henk" value="/productdetails.aspx?id=1aa6" />
<add key="/aaaa" value="/productdetails.aspx?id=xxxx" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.