C# 使用LINQ解析XML文件

C# 使用LINQ解析XML文件,c#,xml,linq,file,parsing,C#,Xml,Linq,File,Parsing,我需要根据某些字段值从xml文件中提取数据。xml文件是这样设置的 <main> <report> <version>1.0</version> <ID>1234</ID> <field> <acel>80</acel> <decel>50</decel> <left>20</left> <righ

我需要根据某些字段值从xml文件中提取数据。xml文件是这样设置的

<main>
 <report>
  <version>1.0</version>
  <ID>1234</ID>
  <field>
   <acel>80</acel>
   <decel>50</decel>
   <left>20</left>
   <right>10</right>
   <category>1-10</category>
  </field> 
  <field>
   <acel>30</acel>
   <decel>54</decel>
   <left>12</left>
   <right>13</right>
   <category>10-20</category>
  </field> 
  <field>
   <acel>34</acel>
   <decel>210</decel>
   <left>27</left>
   <right>9</right>
   <category>20-30</category>
  </field>
 </report>
 <report>
 ....
 </report>
</main>
我需要在文件中搜索与特定ID和特定版本匹配的报告,然后获取acel、decel、left、right等关联字段

例如,我需要找到一个ID为1234和1.0版的报告,并有所有字段值80,50等。任何帮助都很好。我已经有了返回ID和版本的代码,但是我很难获得基于版本和ID的所有字段值

谢谢。

给你一个提示:

var xDoc = XDocument.Parse(xml);
var fields = xDoc
    .Descendants("report")
    .Where(r => (int)r.Element("ID") == 1234)
    .Elements("field")
    .Select(f => new
        {
            Acel = f.Element("acel").Value,
            Decel = f.Element("decel").Value,
        }
    );
我们首先获取
report
节点,并将这些节点过滤到与
1234
ID
匹配的节点,这样我们就得到了示例中的第一个节点。接下来,我们查询此报表中的所有
字段
节点,并根据字段值提取新对象。看起来很简单很酷?真的

给你一个提示:

var xDoc = XDocument.Parse(xml);
var fields = xDoc
    .Descendants("report")
    .Where(r => (int)r.Element("ID") == 1234)
    .Elements("field")
    .Select(f => new
        {
            Acel = f.Element("acel").Value,
            Decel = f.Element("decel").Value,
        }
    );

我们首先获取
report
节点,并将这些节点过滤到与
1234
ID
匹配的节点,这样我们就得到了示例中的第一个节点。接下来,我们查询此报表中的所有
字段
节点,并根据字段值提取新对象。看起来很简单很酷?真的

首先插入一个
。Where()

var query = doc
        .Descendants("report")
        .Where(r => r.Element("version").Value == "1.0" 
                    && r.Element("ID").Value == "1234") 
        .Select(raw => new
           {
               version = (string)raw.Element("version"), 
               tcid = (string)raw.Element("id"),
               forces = raw.Element("field").Elements("acel")
                          .Select(acel => (int)acel).ToList()

           });

首先插入一个
。Where()

var query = doc
        .Descendants("report")
        .Where(r => r.Element("version").Value == "1.0" 
                    && r.Element("ID").Value == "1234") 
        .Select(raw => new
           {
               version = (string)raw.Element("version"), 
               tcid = (string)raw.Element("id"),
               forces = raw.Element("field").Elements("acel")
                          .Select(acel => (int)acel).ToList()

           });

关于使用大量样本执行所有这些操作,有相当好的文档:-关于使用大量样本执行所有这些操作,有相当好的文档:-