C#读取XML文件

<?xml version="1.0" encoding="utf-8"?>
<root xsi:noNamespaceSchemaLocation="SystemParameter.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <HardwareDevices>
        <HardwareDevice DeviceID="0" Name="CPU1" DeviceType="PLC">
            <PLC>
                <Communication CommType="Network">
                    <!-- <Network Address="172.27.224.33.1.1" Port="851" Simulation="false"/> -->
                    <Network Address="172.27.224.33.1.1" Port="5025" Simulation="True"/>
                </Communication>
                <Protocol ProtocolType="AdsProtocol">
                    <MCProtocol ConnectUnitNumber="0" NetworkNumber="3" SourceNetworkNumber="1023" SourceStationNumber="0" StationNumber="0"/>
                    <AdsProtocol ConnectUnitNumber="0" NetworkNumber="3" SourceNetworkNumber="1023" SourceStationNumber="0" StationNumber="0"/>
                </Protocol>
                <IOs>
                    <DirectIO DataOffset="0" DataLen="11748">
                        <Blocks>
                            <Block ID="0" Type="0" Offset="0" Number="84" BaseOffset="0" DB="1"/>
                            <Block ID="1" Type="1" Offset="84" Number="1248" BaseOffset="0" DB="1"/>
                            <Block ID="2" Type="2" Offset="8192" Number="104" BaseOffset="0" DB="1"/>
                            <Block ID="3" Type="3" Offset="8296" Number="3448" BaseOffset="0" DB="1"/>
                            <Block ID="3287" Type="5" Offset="4096" Number="12024" BaseOffset="0" DB="1" VarName="PLC_EPD_DATA.EPD_TORQUE_DATA"/>
                            <Block ID="3281" Type="7" Offset="2096" Number="24024" BaseOffset="0" DB="1" VarName="PLC_EPD_DATA.EPD_LASER_DATA"/>
                            <Block ID="3283" Type="9" Offset="2048" Number="48024" BaseOffset="0" DB="1" VarName="PLC_EPD_DATA.EPD_ECV_DATA"/>
                        </Blocks>
                    </DirectIO>
                </IOs>
                <Product>
                    <Type>"QSerial"</Type>
                    <Manufacture>"Mitsubishi"</Manufacture>
                </Product>
            </PLC>
        </HardwareDevice>
       
    </HardwareDevices>
</root>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace OperationXml
{
    class Program
    {
        static void Main(string[] args)
        {
            LoadConfig("PLCParameter.xml");
            Console.ReadKey();
        }
        public static void LoadConfig(string filename)
        {
            try
            {
                XDocument doc = XDocument.Load(filename);
                XElement PLC = doc.Element("root").Element("HardwareDevices").Element("HardwareDevice").Element("PLC");
                InitBlocks(PLC.Element("IOs").Element("DirectIO").Element("Blocks"));
            }
            catch (Exception ex)
            {
                throw ex;
            }
          
        }
        private static void InitBlocks(XElement Blocks)
        {
            var blocks = from p in Blocks.Elements("Block")
                         select p;
            //Console.WriteLine(blocks.ElementAt(0));
            //Console.WriteLine(blocks.ElementAt(1));
            //Console.WriteLine(blocks.ElementAt(2));
            //Console.WriteLine(blocks.ElementAt(3));
            //Console.WriteLine(blocks.ElementAt(4));
            //Console.WriteLine(blocks.ElementAt(5));
            //Console.WriteLine(blocks.ElementAt(6));
       
            foreach (var block in blocks)
            {
                Console.WriteLine($"{block}");
                PLCBlock(block);
            }
          
        }
        public static void  PLCBlock(XElement Block)
        {
            int ID = Convert.ToUInt16(Block.Attribute("ID").Value);
            int blocktype = Convert.ToUInt16(Block.Attribute("Type").Value);
            int offset = Convert.ToUInt16(Block.Attribute("Offset").Value);
            int len = Convert.ToUInt16(Block.Attribute("Number").Value);
            Console.WriteLine($"{ID}\t{blocktype}\t{offset}\t{len}");
        }
    }
}

 

输出结果:

<Block ID="0" Type="0" Offset="0" Number="84" BaseOffset="0" DB="1" />
0       0       0       84
<Block ID="1" Type="1" Offset="84" Number="1248" BaseOffset="0" DB="1" />
1       1       84      1248
<Block ID="2" Type="2" Offset="8192" Number="104" BaseOffset="0" DB="1" />
2       2       8192    104
<Block ID="3" Type="3" Offset="8296" Number="3448" BaseOffset="0" DB="1" />
3       3       8296    3448
<Block ID="3287" Type="5" Offset="4096" Number="12024" BaseOffset="0" DB="1" VarName="PLC_EPD_DATA.EPD_TORQUE_DATA" />
3287    5       4096    12024
<Block ID="3281" Type="7" Offset="2096" Number="24024" BaseOffset="0" DB="1" VarName="PLC_EPD_DATA.EPD_LASER_DATA" />
3281    7       2096    24024
<Block ID="3283" Type="9" Offset="2048" Number="48024" BaseOffset="0" DB="1" VarName="PLC_EPD_DATA.EPD_ECV_DATA" />
3283    9       2048    48024

 

posted @ 2021-04-02 09:54  WellMandala  阅读(284)  评论(0编辑  收藏  举报