如何计算包含特定元素的特定元素

本文关键字:元素 包含特 何计算 计算 | 更新日期: 2023-09-27 18:25:35

考虑xml类:

<Main>
   <ActivityOne>
       <!-- this should be counted -->
       <TaskA>yes</TaskA>
       <TaskB>do do do</TaskB>
   </ActivityOne>
   <ActivityTwo>
       <ActivityFive>
           <TaskA>da da da</TaskA>
       </ActivityFive>
   </ActivityTwo>
       <ActivityOne>
           <!-- this should not be counted -->
           <TaskC>yadda yadda</TaskC>
       </ActivityOne>
   <ActivityThree>
       <ActivityOne>
           <!-- this should be counted -->
           <ActivityFour>
               <TaskA>yes</TaskA>
           </ActivityFour>
           <TaskC>nope</TaskC>
       </ActivityOne>
       <ActivityTwo>
           <TaskF>no</TaskF>
       </ActivityTwo>
   </ActivityThree>
   <ActivityFour>
       <TaskA>nope</TaskA>
   </ActivityFour>
</Main>

我正在计算包含一个或多个"TaskA"元素的"ActivityOne"元素的数量。

我试过这个:

int count = xDoc.Descendants("ActivityOne").Where(x => x.Descendants("TaskA").Count() > 0).Count();

但它似乎只计算ActivityOne元素,这些元素的TaskA比直接子项更深。

如何计算包含特定元素的特定元素

您提供的解决方案非常好:

int count = xDoc.Descendants("ActivityOne")
                .Where(x => x.Descendants("TaskA").Count() > 0)
                .Count();

我想再添加一个解决方案,它可以帮助您使用XPath:解决这个问题

int count = xDoc.XPathSelectElements("//ActivityOne[descendant::TaskA]").Count();

这是一个稍短的表达式,在我看来,如果您需要使用特殊条件从XML中选择一些元素,这是一种更好的方法。