C# 使用LINQ解析XML文件
我需要根据某些字段值从xml文件中提取数据。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
<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()
});
关于使用大量样本执行所有这些操作,有相当好的文档:-关于使用大量样本执行所有这些操作,有相当好的文档:-