【问题标题】:Check for Duplicate Values in Each Child in XML via LINQ通过 LINQ 检查 XML 中每个子项中的重复值
【发布时间】:2016-09-27 13:15:00
【问题描述】:

我不熟悉使用 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

但我需要为每个广告都做这个循环。

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:

    首先,选择所有商业节点,然后对于每个节点,您可以使用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
    }
    

    【讨论】:

    • 嗨.. 很抱歉我的问题不清楚,但listingAgent 不是商业的直接孩子。这还能用吗?
    • 好吧,如果代理商在商业广告中,请使用Descendants 而不是Elements 方法
    • 嘿,谢谢。。如果我可以问另一个相关的问题。如何识别标签是否重复?不仅是值,还有标签名称?示例如果商业标签中有多个listingagent标签,如何抛出错误??
    • 检测重复元素的最佳方法是使用 group by。 XElement 有一个名为 Name 的属性,按该属性分组
    • 您能帮忙查询吗?我是 XML 新手
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 2014-06-28
    • 2021-02-10
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    相关资源
    最近更新 更多