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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端