如何在 C# 中使用 XPath 根据来自不同节点的 2 个属性 select 值?

How to select a value depending on 2 attributes from separate nodes using XPath in C#?

所以, 我有一个 XML 文件,结构如下,

<Root>
  <Parent StoreDate="2014-12-31" Type="1">
    <Child1>2014-01-31</Child1>
    <Child2 TimePeriod="M1">
      <GrandChild1>-4.58849</GrandChild1>
      <GrandChild2>288</GrandChild2>
    </Child2>
  </Parent>
  <Parent StoreDate="2014-12-31" Type="1">
    <Child1>2014-02-28</Child1>
    <Child2 TimePeriod="M1">
      <GrandChild1>4.58015</GrandChild1>
      <GrandChild2>284</GrandChild2>
    </Child2>
  </Parent>
  <Parent StoreDate="2014-12-31" Type="1">
    <Child1>2014-03-31</Child1>
    <Child2 TimePeriod="M4">
      <GrandChild1>-0.65693</GrandChild1>
      <GrandChild2>284</GrandChild2>
    </Child2>
  </Parent>
  <Parent StoreDate="2014-12-31" Type="3">
    <Child1>2014-03-31</Child1>
    <Child2 TimePeriod="M1">
      <GrandChild1>-5.65693</GrandChild1>
      <GrandChild2>2334</GrandChild2>
    </Child2>
  </Parent>
</Root>

我想select所有GrandChild1,如果Parent的属性[@Type]是1,Child2的属性[@TimePeriod]是M1。

我已将 root 加载到名为 xElement 的 XElement 中。然后,我正在使用

IEnumerable<XElement> elements = xElement.XPathSelectElements("(/Parent[@Type='1'] | /Parent[Child2/@TimePeriod='M1'])/Child2/GrandChild1");

这应该 select 只有来自上述 XML 文件的第一个和第二个 GrandChild1。相反,它 selecting 所有 GrandChild1。我做错了什么?

我试过使用 'and' 而不是“|”在代码中。但它根本不起作用并抛出异常。

大家有什么建议吗? 提前致谢。

编辑:

我也想select Child1 有同样的条件。我需要做什么?

编辑:在问题更改后将代码添加到 select Child1。

代码给 select Grand Child1 您可以使用 //Parent[@Type='1']/Child2[@TimePeriod='M1']/GrandChild1

子项 1 选择 XPath:(一种方法)

//Parent[@Type='1']/Child2[@TimePeriod='M1']/../Child1