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
4556