Select 基于 child 元素条件的 XML 元素数组
Select Array of XML Elements based on child element condition
我有一些 XML 像下面的
<USTrades>
<USTrade>
<BalanceAmount>1000</BalanceAmount>
<Narratives>
<Narrative code="1" description="Code 1"/>
<Narrative code="2" description="Code 2"/>
</Narratives>
</USTrade>
<USTrade>
<BalanceAmount>2000</BalanceAmount>
<Narratives>
<Narrative code="3" description="Code 3"/>
</Narratives>
</USTrade>
</USTrades>
我想 select 叙述代码不等于 3 的余额总和,所以我用这个 XML 得到的结果是 1000。下面的代码看起来是select 正确的叙述,但我不知道如何 select 基于 child 条件
的正确 parent
var trades = document.Descendants("USTrades").Descendants("Narratives").Descendants("Narrative").Where(n => (string)n.Attribute("code") != "3");
此查询产生了想要的结果:
var r = x.Elements("USTrades")
.Elements("USTrade")
.Where(e => e.Element("Narratives")
.Elements("Narrative")
.All(ee => ee.Attribute("code").Value != "3"))
.Select(e => (int)e.Element("BalanceAmount"))
.Sum();
我用下面的XML测试过它:
<USTrades>
<USTrade>
<BalanceAmount>1000</BalanceAmount>
<Narratives>
<Narrative code="1" description="Code 1"/>
<Narrative code="2" description="Code 2"/>
</Narratives>
</USTrade>
<USTrade>
<BalanceAmount>2000</BalanceAmount>
<Narratives>
<Narrative code="3" description="Code 3"/>
</Narratives>
</USTrade>
<USTrade>
<BalanceAmount>3000</BalanceAmount>
<Narratives>
<Narrative code="4" description="Code 4"/>
</Narratives>
</USTrade>
</USTrades>
这里r
是4000
,你原来的XML是1000
。
我有一些 XML 像下面的
<USTrades>
<USTrade>
<BalanceAmount>1000</BalanceAmount>
<Narratives>
<Narrative code="1" description="Code 1"/>
<Narrative code="2" description="Code 2"/>
</Narratives>
</USTrade>
<USTrade>
<BalanceAmount>2000</BalanceAmount>
<Narratives>
<Narrative code="3" description="Code 3"/>
</Narratives>
</USTrade>
</USTrades>
我想 select 叙述代码不等于 3 的余额总和,所以我用这个 XML 得到的结果是 1000。下面的代码看起来是select 正确的叙述,但我不知道如何 select 基于 child 条件
的正确 parentvar trades = document.Descendants("USTrades").Descendants("Narratives").Descendants("Narrative").Where(n => (string)n.Attribute("code") != "3");
此查询产生了想要的结果:
var r = x.Elements("USTrades")
.Elements("USTrade")
.Where(e => e.Element("Narratives")
.Elements("Narrative")
.All(ee => ee.Attribute("code").Value != "3"))
.Select(e => (int)e.Element("BalanceAmount"))
.Sum();
我用下面的XML测试过它:
<USTrades>
<USTrade>
<BalanceAmount>1000</BalanceAmount>
<Narratives>
<Narrative code="1" description="Code 1"/>
<Narrative code="2" description="Code 2"/>
</Narratives>
</USTrade>
<USTrade>
<BalanceAmount>2000</BalanceAmount>
<Narratives>
<Narrative code="3" description="Code 3"/>
</Narratives>
</USTrade>
<USTrade>
<BalanceAmount>3000</BalanceAmount>
<Narratives>
<Narrative code="4" description="Code 4"/>
</Narratives>
</USTrade>
</USTrades>
这里r
是4000
,你原来的XML是1000
。