XML文件结构如下:
<?xml version="1.0" encoding="utf-8"?>
<Meters>
<Meter Ordernumber="G020539612S0">
<Id>16071536</Id>
<Pass>0</Pass>
<Fail>1</Fail>
<Status>0</Status>
<Date>2020/1/14 19:22:29</Date>
<Ordernumber>G020539612S0</Ordernumber>
<Sapnumber>157999</Sapnumber>
<Type>RADIO5_TRX_SAM</Type>
<Elapsed>0</Elapsed>
</Meter>
<Meter Ordernumber="G014943912S0">
<Id>16073311</Id>
<Pass>1</Pass>
<Fail>0</Fail>
<Status>1</Status>
<Date>2020/1/14 19:19:41</Date>
<Ordernumber>G014943912S0</Ordernumber>
<Sapnumber>166703</Sapnumber>
<Type>BASIC</Type>
<Elapsed>25</Elapsed>
</Meter>
.............
</Meters>
解析XML文件的方式多种,没有说一定要使用如下的方式,如下方式只是其中的一种方式,验证可行。添加引用 using System.Xml.Linq;
从XML结构来看,Ordernumber 为每个表的属性字段
1. 测试获取属性字段值 Ordernumber
xmlfile = "Counts.xml"
XElement xes = XElement.Load(xmlfile);
//order numbers 属性
IEnumerable<string> orderNrs = from ods in xes.Descendants("Meter")
select (string)ods.Attribute("Ordernumber");
foreach (var od in orderNrs)
{
Console.WriteLine(od);
}
输出:
能将每个Meter的OrderNumber属性值获取成功
2. 选择任意节点测试 ID
var IdList = from id in xes.Descendants("Id")
select id;
foreach (var item in IdList)
{
Console.WriteLine(item);
Console.WriteLine(item.Value);
}
输出:
获取每个节点的Id 成功。
3. 筛选MeterID的值
List<string> ids = xes.Elements("Meter").Elements("Id")
.Select(i => i.Value)
.ToList();
foreach (var i in ids)
{
Console.WriteLine(i);
}
输出:
4. 筛选状态为1的产品的ID,和测试时间
IEnumerable<XElement> eles = from item in xes.Descendants("Meter")
where (int)item.Element("Status") == 1
select item;
foreach (var es in eles)
{
Console.WriteLine(es.Element("Id"));
Console.WriteLine(es.Element("Date"));
}
5. 筛选状态为1的产品的ID,和测试时间,且时间降序排列
IEnumerable<XElement> eles = from item in xes.Descendants("Meter")
where ((int)item.Element("Status") == 1 && (int)item.Element("Elapsed") > 30)
orderby (int)item.Element("Id") descending
select item;
foreach (var es in eles)
{
Console.WriteLine(es.Element("Id"));
Console.WriteLine(es.Element("Date"));
}
输出:
依据时间倒序输出OK。