如何获取子节点并从父节点对其进行分组

本文关键字:父节点 何获取 获取 子节点 | 更新日期: 2023-09-27 18:22:21

我有一个XElement对象,它的结构与下面的对象相同。如何从DataPointValue属性不同的TestResults根节点中选择所有CalcConceptId子节点,并将它们存储为数组/列表中的XElement?我希望能够将每个子节点存储为另一个XElement,这样我就可以循环遍历它们,并从每个节点中取出SeriesAsOfDate和数据节点。

<TestResults RSSD="123456">
  <CalcConceptId Id="110" DataPointValue="10">
    <SeriesAsOfDate Value="2013-07-10T00:00:00">
      <Data AsOfDate="7/10/2013" ExpectedValue="1" />
      <Data AsOfDate="7/3/2013" ExpectedValue="14" />
      <Data AsOfDate="6/26/2013" ExpectedValue="55" />
    </SeriesAsOfDate>
  </CalcConceptId>
  <CalcConceptId Id="110" DataPointValue="20">
    <SeriesAsOfDate Value="2013-07-10T00:00:00">
      <Data AsOfDate="7/10/2013" ExpectedValue="4" />
      <Data AsOfDate="7/3/2013" ExpectedValue="34" />
      <Data AsOfDate="6/26/2013" ExpectedValue="1" />
    </SeriesAsOfDate>
  </CalcConceptId>
</TestResults>

如何获取子节点并从父节点对其进行分组

我认为您希望所有CalcConceptId节点都按DataPointValue分组,但有点不清楚"DataPointValue的不同之处"是什么意思。

不管怎样,这就是我认为你想要的。。。

    var calcConceptIdGroupedByDataPointValue =
        doc.Descendants("CalcConceptId")
           .GroupBy(calcConceptId => calcConceptId.Attribute("DataPointValue"));

我不能100%确定。。。但如果我明白你的要求,你在找这个吗?

//assuming the XElement is called Data:
var result = 
    data.Elements().GroupBy(x => int.Parse(x.Attribute("DataPointValue")))
        .Select(g => g.First());