C# 基于父元素属性选择第n个子元素
我在使用LINQtoXML查询这个不太热门的XML文档时遇到了一点问题 模式的一个示例如下C# 基于父元素属性选择第n个子元素,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我在使用LINQtoXML查询这个不太热门的XML文档时遇到了一点问题 模式的一个示例如下 <Data> <Row Oper="" Val="THIS"> <Col Oper="" Val=""> <Out Val="0"/> <Out Val=""/> <Out Val="16600"/> <Out Val=
<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>
需要明确的是:我不允许更改XML文档结构 .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")
为了解决这个问题,我简化了一点模式。这似乎是错误的;基本上。ntd.Root.Elements()是如何定义的;工作?回答我自己的问题;而不是使用.Root.Elements,我需要.Root.substands(“行”)。您的答案适用于我提供的模式,谢谢!(在这之后,简单的更改也适用于“真实”模式)@abatishchev如何将select语句的值保存到一个已经创建的对象中?我知道我可以新建一个全新的对象,然后循环移动它们,但这似乎很可笑。LINQ是关于创建对象和查询数据的。而不是修改现有数据。我不知道你想做什么。查询de>返回
字符串的集合
。您是否已经有列表
不想用该数据更新?
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")