C# 解析XML文件

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flysh05

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值