如何计算包含特定元素的特定元素?
How can I count specific elements that contain a specific element?
考虑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();
但它似乎只计算具有比直接子级更深的 TaskA 的 ActivityOne 元素。
您提供的解决方案完全没问题:
int count = xDoc.Descendants("ActivityOne")
.Where(x => x.Descendants("TaskA").Count() > 0)
.Count();
我想再添加一个可以帮助您使用 XPath 解决此问题的解决方案:
int count = xDoc.XPathSelectElements("//ActivityOne[descendant::TaskA]").Count();
它的表达式稍微短了一点,在我看来,如果您需要使用特殊条件 select 来自 XML 的一些元素,这是一个更好的方法。
考虑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();
但它似乎只计算具有比直接子级更深的 TaskA 的 ActivityOne 元素。
您提供的解决方案完全没问题:
int count = xDoc.Descendants("ActivityOne")
.Where(x => x.Descendants("TaskA").Count() > 0)
.Count();
我想再添加一个可以帮助您使用 XPath 解决此问题的解决方案:
int count = xDoc.XPathSelectElements("//ActivityOne[descendant::TaskA]").Count();
它的表达式稍微短了一点,在我看来,如果您需要使用特殊条件 select 来自 XML 的一些元素,这是一个更好的方法。