通过LINQ检查XML中每个子节点中的重复值

本文关键字:子节点 LINQ 检查 XML 通过 | 更新日期: 2023-09-27 18:08:59

我刚开始使用linq,特别是linq to xml,我在尝试迭代结果时遇到了麻烦。我的xml文档有多个相同名称的节点嵌套在一个父节点中。

示例XML为:

<commercial>
   <listingAgent>1</listingAgent>
   <listingAgent>2</listingAgent>
   <listingAgent>1</listingAgent>
</commercial>  
<commercial>
   <listingAgent>1</listingAgent>
   <listingAgent>2</listingAgent>
   <listingAgent>3</listingAgent>
</commercial> 

所以每个商业标签都应该有唯一的列表代理值。如果不是,我需要引发一个错误。

真正的XML是非常复杂的,这些标签根本就不是根。所以我需要遍历这些然后搜索重复的

我尝试了以下代码

foreach (XElement e in root.Descendants("listingAgent"))
{
   listerror.Add(e.Value);
}
if(listerror.Count != listerror.Distinct().Count()) 
     Then show error

但是我需要为每个商业广告做这个循环。

通过LINQ检查XML中每个子节点中的重复值

首先,选择所有商业节点,然后对于每个节点,您可以使用Select获得代理值列表,这样您将获得列表的列表,最后您可以应用您之前尝试的相同条件,但现在对于每个代理列表:

var result= xdoc.Descendants("commercial")
                .Select(c=>c.Descendants("listingAgent").Select(e=>e.Value));
if(result.Any(e=>e.Count()!= e.Distinct().Count())
{
  //error
}