Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于父元素属性选择第n个子元素_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C# 基于父元素属性选择第n个子元素

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=

我在使用LINQtoXML查询这个不太热门的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>
需要明确的是:我不允许更改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")