如何在 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
所以, 我有一个 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