使用Linq to XML来查询这个不那么热门的xml文档时,我遇到了一些问题。
架构的一个例子是这样的。
<Data>
<Row Oper="" Val="THIS">
<Col Oper="" Val="">
<Out Val="0"/>
<Out Val=""/>
<Out Val="16600"/>
<Out Val="10000"/>
</Col>
</Row>
<Row Oper="" Val="THAT">
<Out Val=...">
....
</Row>
</Data>
基本上;我需要根据Row Val匹配主元素,然后根据任意数字得到第n个“Val”。
澄清;我必须匹配“This”并得到第三个孩子的行。我该怎么做呢?
预期输出:“16600”
这是我正在看的内容(我不知道如何在linq中选择第n个孩子)
var query = (from nt in ntd.Descendants("Data").Elements("Out").Skip(1)
where nt.Element.Attribute("Val").Value == "this"
select nt.[nth child of row somehow].Attribute("Val").Value)
请注意:我不允许更改XML文档结构。
答案 0 :(得分:2)
.ElementAt(3)
.ElementAt(2)
为您提供集合中的第三个元素 - 它是基于0的索引...
您的示例XML与您显示的查询不完全匹配,因此我决定遵循架构,而不是查询:
var query = from r in ntd.Root.Elements("Row")
where (string)r.Attribute("Val") == "THIS"
select (string)r.Element("Col").Elements("Out").ElementAt(2).Attribute("Val")