C#操作XML

在写一个串口通信的时候用到的C#操作xml类

功能:对xml节点增、删、修改功能.

本来是用linq写的,后来发现3.5框架太大,又改成C#2.0的.现都附上代码,方便以后查询

 

C# 2.0

  1. using System;
  2. using System.Collections.Generic;

  3. using System.Text;

  4. using System.Xml;
  5. using System.IO;

  6. namespace SerialPortComm
  7. {
  8.     public class PortConfig
  9.     {

  10.         public PortConfig()
  11.         {

  12.         }
  13.         /// <summary>
  14.         /// 端口号
  15.         /// </summary>
  16.         public string PortName = "COM1";
  17.         /// <summary>
  18.         /// 波特率
  19.         /// </summary>
  20.         public string BaudRate = "9600";
  21.         /// <summary>
  22.         /// 数据位
  23.         /// </summary>
  24.         public string DataBits = "8";
  25.         /// <summary>
  26.         /// 校验位
  27.         /// </summary>
  28.         public string Paritys = "None";
  29.         /// <summary>
  30.         /// 停止位
  31.         /// </summary>
  32.         public string StopBits = "1";
  33.         /// <summary>
  34.         /// 握手协议
  35.         /// </summary>
  36.         public string HandShaking = "None";

  37.     }

  38.     public class SerialPortSetting
  39.     {
  40.         /// <summary>
  41.         /// 文件路径
  42.         /// </summary>
  43.         public string FilePath = "config.xml";

  44.         /// <summary>
  45.         /// 构造函数
  46.         /// </summary>
  47.         /// <param name="FileName"></param>
  48.         public SerialPortSetting(string FileName)
  49.         {
  50.             FilePath = FileName;
  51.             fileIsExist(FileName);
  52.         }

  53.         /// <summary>
  54.         /// 增加端口配置
  55.         /// </summary>
  56.         /// <param name="portName"></param>
  57.         public void AddSerialPort(PortConfig pConfig)
  58.         {
  59.             if (!Exist(pConfig.PortName))
  60.             {

  61.                 XmlDocument xDom = new XmlDocument();
  62.                 xDom.Load(FilePath);
  63.                 XmlNode root = xDom.SelectSingleNode("SerialPorts");
  64.                 XmlElement xPortName = xDom.CreateElement("PortName");
  65.                 xPortName.SetAttribute("Id", pConfig.PortName);

  66.                 XmlElement xSubNode1 = xDom.CreateElement("BaudRate");
  67.                 xSubNode1.InnerText = pConfig.BaudRate;
  68.                 xPortName.AppendChild(xSubNode1);

  69.                 XmlElement xSubNode2 = xDom.CreateElement("DataBits");
  70.                 xSubNode2.InnerText = pConfig.DataBits;
  71.                 xPortName.AppendChild(xSubNode2);

  72.                 XmlElement xSubNode3 = xDom.CreateElement("Paritys");
  73.                 xSubNode3.InnerText = pConfig.Paritys;
  74.                 xPortName.AppendChild(xSubNode3);

  75.                 XmlElement xSubNode4 = xDom.CreateElement("StopBits");
  76.                 xSubNode4.InnerText = pConfig.StopBits;
  77.                 xPortName.AppendChild(xSubNode4);

  78.                 XmlElement xSubNode5 = xDom.CreateElement("HandShaking");
  79.                 xSubNode5.InnerText = pConfig.HandShaking;
  80.                 xPortName.AppendChild(xSubNode5);

  81.                 root.AppendChild(xPortName);//增加端口配置
  82.                 xDom.Save(FilePath);
  83.             }

  84.         }

  85.         /// <summary>
  86.         /// 删除端口配置
  87.         /// </summary>
  88.         /// <param name="portName">端口名称</param>
  89.         public void DelSerialPort(string portName)
  90.         {

  91.             XmlDocument xDom = new XmlDocument();
  92.             xDom.Load(FilePath);

  93.             XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
  94.             foreach (XmlNode xn in xmlNodeList)
  95.             {
  96.                 XmlElement xe = (XmlElement)xn;
  97.                 if (xe.GetAttribute("Id") == portName)
  98.                 {
  99.                     xe.RemoveAll();//删除改节点及子节点
  100.                 }
  101.             }
  102.             xDom.Save(FilePath);

  103.         }

  104.         /// <summary>
  105.         /// 返回端口配置
  106.         /// </summary>
  107.         /// <param name="portName">端口名称</param>
  108.         /// <returns></returns>
  109.         public PortConfig GetSerialPortName(string portName)
  110.         {

  111.             PortConfig portConfig = new PortConfig();

  112.             XmlDocument xDom = new XmlDocument();
  113.             xDom.Load(FilePath);
  114.             bool has = false;
  115.             XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
  116.             foreach (XmlNode xn in xmlNodeList)
  117.             {
  118.                 XmlElement xe = (XmlElement)xn;
  119.                 if (xe.GetAttribute("Id") == portName)
  120.                 {
  121.                     foreach (XmlNode xchildeNode in xe.ChildNodes)
  122.                     {
  123.                         XmlElement xchild = (XmlElement)xchildeNode;
  124.                         switch (xchild.Name)
  125.                         {
  126.                             case "BaudRate":
  127.                                 portConfig.BaudRate = xchild.InnerText ;
  128.                                 break;
  129.                             case "DataBits":
  130.                                 portConfig.DataBits = xchild.InnerText;
  131.                                 break;
  132.                             case "Paritys":
  133.                                 portConfig.Paritys = xchild.InnerText;
  134.                                 break;
  135.                             case "StopBits":
  136.                                 portConfig.StopBits = xchild.InnerText;
  137.                                 break;
  138.                             case "HandShaking":
  139.                                 portConfig.HandShaking = xchild.InnerText;
  140.                                 break;
  141.                         }
  142.                     }
  143.                     has = true;
  144.                     break;
  145.                 }
  146.             }
  147.             xDom.Save(FilePath);

  148.             if (has == true)
  149.             {
  150.                 return portConfig;
  151.             }
  152.             else
  153.             {
  154.                 return null;
  155.             }


  156.         }

  157.         /// <summary>
  158.         /// 增加端口配置
  159.         /// </summary>
  160.         /// <param name="portName"></param>
  161.         public void EditSerialPort(PortConfig portConfig)
  162.         {
  163.             XmlDocument xDom = new XmlDocument();
  164.             xDom.Load(FilePath);

  165.             XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
  166.             foreach (XmlNode xn in xmlNodeList)
  167.             {
  168.                 XmlElement xe = (XmlElement)xn;
  169.                 if (xe.GetAttribute("Id") == portConfig.PortName)
  170.                 {
  171.                     foreach (XmlNode xchildeNode in xe.ChildNodes)
  172.                     {
  173.                         XmlElement xchild = (XmlElement)xchildeNode;
  174.                         switch (xchild.Name)
  175.                         {
  176.                             case "BaudRate":
  177.                                 xchild.InnerText = portConfig.BaudRate;
  178.                                 break;
  179.                             case "DataBits":
  180.                                 xchild.InnerText = portConfig.DataBits;
  181.                                 break;
  182.                             case "Paritys":
  183.                                 xchild.InnerText = portConfig.Paritys;
  184.                                 break;
  185.                             case "StopBits":
  186.                                 xchild.InnerText = portConfig.StopBits;
  187.                                 break;
  188.                             case "HandShaking":
  189.                                 xchild.InnerText = portConfig.HandShaking;
  190.                                 break;
  191.                         }
  192.                     }
  193.                     break;
  194.                 }
  195.             }
  196.             xDom.Save(FilePath);

  197.         }

  198.         /// <summary>
  199.         /// 判断端口配置是否存在
  200.         /// </summary>
  201.         /// <param name="portName"></param>
  202.         /// <returns></returns>
  203.         public bool Exist(string portName)
  204.         {

  205.             XmlDocument xDom = new XmlDocument();
  206.             xDom.Load(FilePath);
  207.             XmlNodeList xNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
  208.             bool find = false;
  209.             foreach (XmlNode xmlNode in xNodeList)
  210.             {

  211.                 XmlElement xe = (XmlElement)xmlNode;
  212.                 if (xe.GetAttribute("Id") == portName.Trim())
  213.                 {
  214.                     find = true;
  215.                     break;

  216.                 }
  217.             }
  218.             return find;
  219.         }

  220.         /// <summary>
  221.         /// 判断文件是否存在
  222.         /// </summary>
  223.         /// <param name="FilePath"></param>
  224.         public void fileIsExist(string FilePath)
  225.         {
  226.             if (!File.Exists(FilePath))
  227.             {

  228.                 XmlDocument xDom = new XmlDocument();

  229.                 XmlElement xmlRoot = xDom.CreateElement("SerialPorts");
  230.                 xDom.AppendChild(xmlRoot);
  231.                 xDom.Save(FilePath);
  232.             }
  233.         }
  234.     }
  235. }

C# 3.5 Linq操作XML

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml.Linq;
  6. using System.Xml;
  7. using System.IO;

  8. namespace SerialPortComm
  9. {
  10.     public class PortConfig
  11.     {

  12.         public PortConfig()
  13.         {

  14.         }
  15.         /// <summary>
  16.         /// 端口号
  17.         /// </summary>
  18.         public string PortName = "COM1";
  19.         /// <summary>
  20.         /// 波特率
  21.         /// </summary>
  22.         public string BaudRate = "9600";
  23.         /// <summary>
  24.         /// 数据位
  25.         /// </summary>
  26.         public string DataBits = "8";
  27.         /// <summary>
  28.         /// 校验位
  29.         /// </summary>
  30.         public string Paritys = "None";
  31.         /// <summary>
  32.         /// 停止位
  33.         /// </summary>
  34.         public string StopBits = "1";
  35.         /// <summary>
  36.         /// 握手协议
  37.         /// </summary>
  38.         public string HandShaking = "None";

  39.     }
  40.     public class SerialPortSetting
  41.     {
  42.         /// <summary>
  43.         /// 文件路径
  44.         /// </summary>
  45.         public string FilePath = "";

  46.         /// <summary>
  47.         /// 构造函数
  48.         /// </summary>
  49.         /// <param name="FileName"></param>
  50.         public SerialPortSetting(string FileName)
  51.         {
  52.             FilePath = FileName;
  53.             fileIsExist(FileName);
  54.         }

  55.         /// <summary>
  56.         /// 增加端口配置
  57.         /// </summary>
  58.         /// <param name="portName"></param>
  59.         public void AddSerialPort(PortConfig pConfig)
  60.         {
  61.             if (!Exist(pConfig.PortName))
  62.             {
  63.                 XDocument xDom = XDocument.Load(FilePath);
  64.                 xDom.Root.Add(new XElement("PortName"new XAttribute("Id", pConfig.PortName),
  65.                     new XElement("BaudRate", pConfig.BaudRate),
  66.                     new XElement("DataBits", pConfig.DataBits),
  67.                     new XElement("Paritys", pConfig.Paritys),
  68.                     new XElement("StopBits", pConfig.StopBits),
  69.                     new XElement("HandShaking", pConfig.HandShaking)));
  70.                 xDom.Save(FilePath);
  71.             }

  72.         }

  73.         /// <summary>
  74.         /// 删除端口配置
  75.         /// </summary>
  76.         /// <param name="portName">端口名称</param>
  77.         public void DelSerialPort(string portName)
  78.         {
  79.             XDocument xDom = XDocument.Load(FilePath);
  80.             var ports = from p in xDom.Root.Elements("PortName") where p.Attribute("Id").Value == portName select p;
  81.             ports.Remove();
  82.             xDom.Save(FilePath);
  83.         }

  84.         /// <summary>
  85.         /// 返回端口配置
  86.         /// </summary>
  87.         /// <param name="portName">端口名称</param>
  88.         /// <returns></returns>
  89.         public PortConfig GetSerialPortName(string portName)
  90.         {
  91.             XDocument xDom = XDocument.Load(FilePath);
  92.             PortConfig portConfig = new PortConfig();

  93.             var ports = from p in xDom.Root.Elements("PortName") where p.Attribute("Id").Value == portName select p;
  94.             if (ports.Count() > 0)
  95.             {
  96.                 XElement xElement = ports.First<XElement>();

  97.                 portConfig.PortName = xElement.Attribute("Id").Value;
  98.                 portConfig.BaudRate = xElement.Element("BaudRate").Value;
  99.                 portConfig.DataBits = xElement.Element("DataBits").Value;
  100.                 portConfig.Paritys = xElement.Element("Paritys").Value;
  101.                 portConfig.StopBits = xElement.Element("StopBits").Value;
  102.                 portConfig.HandShaking = xElement.Element("HandShaking").Value;

  103.             }
  104.             xDom.Save(FilePath);
  105.             return portConfig;
  106.         }

  107.         /// <summary>
  108.         /// 增加端口配置
  109.         /// </summary>
  110.         /// <param name="portName"></param>
  111.         public void EditSerialPort(PortConfig portConfig)
  112.         {
  113.             XDocument xDom = XDocument.Load(FilePath);

  114.             var ports = from p in xDom.Root.Elements("PortName") where p.Attribute("Id").Value == portConfig.PortName select p;
  115.             if (ports.Count() > 0)
  116.             {
  117.                 XElement xElement = ports.First<XElement>();

  118.                 xElement.Attribute("Id").Value = portConfig.PortName;
  119.                 xElement.Element("BaudRate").Value = portConfig.BaudRate;
  120.                 xElement.Element("DataBits").Value = portConfig.DataBits;
  121.                 xElement.Element("Paritys").Value = portConfig.Paritys;
  122.                 xElement.Element("StopBits").Value = portConfig.StopBits;
  123.                 xElement.Element("HandShaking").Value = portConfig.HandShaking;

  124.             }
  125.             xDom.Save(FilePath);
  126.         }

  127.         /// <summary>
  128.         /// 判断端口配置是否存在
  129.         /// </summary>
  130.         /// <param name="portName"></param>
  131.         /// <returns></returns>
  132.         public bool Exist(string portName)
  133.         {
  134.             XDocument xDom = XDocument.Load(FilePath);
  135.             var ports = from p in xDom.Root.Elements("PortName") where p.Attribute("Id").Value == portName select p;
  136.             if (ports.Count() > 0)
  137.             {
  138.                 return true;
  139.             }
  140.             else
  141.             {
  142.                 return false;
  143.             }
  144.         }

  145.         /// <summary>
  146.         /// 判断文件是否存在
  147.         /// </summary>
  148.         /// <param name="FilePath"></param>
  149.         public void fileIsExist(string FilePath)
  150.         {
  151.             if (!File.Exists(FilePath))
  152.             {
  153.                 XDocument xDom = new XDocument();
  154.                 xDom.Add(new XElement("SerialPorts"));
  155.                 xDom.Save(FilePath);
  156.             }
  157.         }

  158.     }
  159. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值