在写一个串口通信的时候用到的C#操作xml类
功能:对xml节点增、删、修改功能.
本来是用linq写的,后来发现3.5框架太大,又改成C#2.0的.现都附上代码,方便以后查询
C# 2.0
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Xml;
- using System.IO;
- namespace SerialPortComm
- {
- public class PortConfig
- {
- public PortConfig()
- {
- }
- /// <summary>
- /// 端口号
- /// </summary>
- public string PortName = "COM1";
- /// <summary>
- /// 波特率
- /// </summary>
- public string BaudRate = "9600";
- /// <summary>
- /// 数据位
- /// </summary>
- public string DataBits = "8";
- /// <summary>
- /// 校验位
- /// </summary>
- public string Paritys = "None";
- /// <summary>
- /// 停止位
- /// </summary>
- public string StopBits = "1";
- /// <summary>
- /// 握手协议
- /// </summary>
- public string HandShaking = "None";
- }
- public class SerialPortSetting
- {
- /// <summary>
- /// 文件路径
- /// </summary>
- public string FilePath = "config.xml";
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="FileName"></param>
- public SerialPortSetting(string FileName)
- {
- FilePath = FileName;
- fileIsExist(FileName);
- }
- /// <summary>
- /// 增加端口配置
- /// </summary>
- /// <param name="portName"></param>
- public void AddSerialPort(PortConfig pConfig)
- {
- if (!Exist(pConfig.PortName))
- {
- XmlDocument xDom = new XmlDocument();
- xDom.Load(FilePath);
- XmlNode root = xDom.SelectSingleNode("SerialPorts");
- XmlElement xPortName = xDom.CreateElement("PortName");
- xPortName.SetAttribute("Id", pConfig.PortName);
- XmlElement xSubNode1 = xDom.CreateElement("BaudRate");
- xSubNode1.InnerText = pConfig.BaudRate;
- xPortName.AppendChild(xSubNode1);
- XmlElement xSubNode2 = xDom.CreateElement("DataBits");
- xSubNode2.InnerText = pConfig.DataBits;
- xPortName.AppendChild(xSubNode2);
- XmlElement xSubNode3 = xDom.CreateElement("Paritys");
- xSubNode3.InnerText = pConfig.Paritys;
- xPortName.AppendChild(xSubNode3);
- XmlElement xSubNode4 = xDom.CreateElement("StopBits");
- xSubNode4.InnerText = pConfig.StopBits;
- xPortName.AppendChild(xSubNode4);
- XmlElement xSubNode5 = xDom.CreateElement("HandShaking");
- xSubNode5.InnerText = pConfig.HandShaking;
- xPortName.AppendChild(xSubNode5);
- root.AppendChild(xPortName);//增加端口配置
- xDom.Save(FilePath);
- }
- }
- /// <summary>
- /// 删除端口配置
- /// </summary>
- /// <param name="portName">端口名称</param>
- public void DelSerialPort(string portName)
- {
- XmlDocument xDom = new XmlDocument();
- xDom.Load(FilePath);
- XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
- foreach (XmlNode xn in xmlNodeList)
- {
- XmlElement xe = (XmlElement)xn;
- if (xe.GetAttribute("Id") == portName)
- {
- xe.RemoveAll();//删除改节点及子节点
- }
- }
- xDom.Save(FilePath);
- }
- /// <summary>
- /// 返回端口配置
- /// </summary>
- /// <param name="portName">端口名称</param>
- /// <returns></returns>
- public PortConfig GetSerialPortName(string portName)
- {
- PortConfig portConfig = new PortConfig();
- XmlDocument xDom = new XmlDocument();
- xDom.Load(FilePath);
- bool has = false;
- XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
- foreach (XmlNode xn in xmlNodeList)
- {
- XmlElement xe = (XmlElement)xn;
- if (xe.GetAttribute("Id") == portName)
- {
- foreach (XmlNode xchildeNode in xe.ChildNodes)
- {
- XmlElement xchild = (XmlElement)xchildeNode;
- switch (xchild.Name)
- {
- case "BaudRate":
- portConfig.BaudRate = xchild.InnerText ;
- break;
- case "DataBits":
- portConfig.DataBits = xchild.InnerText;
- break;
- case "Paritys":
- portConfig.Paritys = xchild.InnerText;
- break;
- case "StopBits":
- portConfig.StopBits = xchild.InnerText;
- break;
- case "HandShaking":
- portConfig.HandShaking = xchild.InnerText;
- break;
- }
- }
- has = true;
- break;
- }
- }
- xDom.Save(FilePath);
- if (has == true)
- {
- return portConfig;
- }
- else
- {
- return null;
- }
- }
- /// <summary>
- /// 增加端口配置
- /// </summary>
- /// <param name="portName"></param>
- public void EditSerialPort(PortConfig portConfig)
- {
- XmlDocument xDom = new XmlDocument();
- xDom.Load(FilePath);
- XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
- foreach (XmlNode xn in xmlNodeList)
- {
- XmlElement xe = (XmlElement)xn;
- if (xe.GetAttribute("Id") == portConfig.PortName)
- {
- foreach (XmlNode xchildeNode in xe.ChildNodes)
- {
- XmlElement xchild = (XmlElement)xchildeNode;
- switch (xchild.Name)
- {
- case "BaudRate":
- xchild.InnerText = portConfig.BaudRate;
- break;
- case "DataBits":
- xchild.InnerText = portConfig.DataBits;
- break;
- case "Paritys":
- xchild.InnerText = portConfig.Paritys;
- break;
- case "StopBits":
- xchild.InnerText = portConfig.StopBits;
- break;
- case "HandShaking":
- xchild.InnerText = portConfig.HandShaking;
- break;
- }
- }
- break;
- }
- }
- xDom.Save(FilePath);
- }
- /// <summary>
- /// 判断端口配置是否存在
- /// </summary>
- /// <param name="portName"></param>
- /// <returns></returns>
- public bool Exist(string portName)
- {
- XmlDocument xDom = new XmlDocument();
- xDom.Load(FilePath);
- XmlNodeList xNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
- bool find = false;
- foreach (XmlNode xmlNode in xNodeList)
- {
- XmlElement xe = (XmlElement)xmlNode;
- if (xe.GetAttribute("Id") == portName.Trim())
- {
- find = true;
- break;
- }
- }
- return find;
- }
- /// <summary>
- /// 判断文件是否存在
- /// </summary>
- /// <param name="FilePath"></param>
- public void fileIsExist(string FilePath)
- {
- if (!File.Exists(FilePath))
- {
- XmlDocument xDom = new XmlDocument();
- XmlElement xmlRoot = xDom.CreateElement("SerialPorts");
- xDom.AppendChild(xmlRoot);
- xDom.Save(FilePath);
- }
- }
- }
- }
C# 3.5 Linq操作XML
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Xml.Linq;
- using System.Xml;
- using System.IO;
- namespace SerialPortComm
- {
- public class PortConfig
- {
- public PortConfig()
- {
- }
- /// <summary>
- /// 端口号
- /// </summary>
- public string PortName = "COM1";
- /// <summary>
- /// 波特率
- /// </summary>
- public string BaudRate = "9600";
- /// <summary>
- /// 数据位
- /// </summary>
- public string DataBits = "8";
- /// <summary>
- /// 校验位
- /// </summary>
- public string Paritys = "None";
- /// <summary>
- /// 停止位
- /// </summary>
- public string StopBits = "1";
- /// <summary>
- /// 握手协议
- /// </summary>
- public string HandShaking = "None";
- }
- public class SerialPortSetting
- {
- /// <summary>
- /// 文件路径
- /// </summary>
- public string FilePath = "";
- /// <summary>
- /// 构造函数
- /// </summary>
- /// <param name="FileName"></param>
- public SerialPortSetting(string FileName)
- {
- FilePath = FileName;
- fileIsExist(FileName);
- }
- /// <summary>
- /// 增加端口配置
- /// </summary>
- /// <param name="portName"></param>
- public void AddSerialPort(PortConfig pConfig)
- {
- if (!Exist(pConfig.PortName))
- {
- XDocument xDom = XDocument.Load(FilePath);
- xDom.Root.Add(new XElement("PortName", new XAttribute("Id", pConfig.PortName),
- new XElement("BaudRate", pConfig.BaudRate),
- new XElement("DataBits", pConfig.DataBits),
- new XElement("Paritys", pConfig.Paritys),
- new XElement("StopBits", pConfig.StopBits),
- new XElement("HandShaking", pConfig.HandShaking)));
- xDom.Save(FilePath);
- }
- }
- /// <summary>
- /// 删除端口配置
- /// </summary>
- /// <param name="portName">端口名称</param>
- public void DelSerialPort(string portName)
- {
- XDocument xDom = XDocument.Load(FilePath);
- var ports = from p in xDom.Root.Elements("PortName") where p.Attribute("Id").Value == portName select p;
- ports.Remove();
- xDom.Save(FilePath);
- }
- /// <summary>
- /// 返回端口配置
- /// </summary>
- /// <param name="portName">端口名称</param>
- /// <returns></returns>
- public PortConfig GetSerialPortName(string portName)
- {
- XDocument xDom = XDocument.Load(FilePath);
- PortConfig portConfig = new PortConfig();
- var ports = from p in xDom.Root.Elements("PortName") where p.Attribute("Id").Value == portName select p;
- if (ports.Count() > 0)
- {
- XElement xElement = ports.First<XElement>();
- portConfig.PortName = xElement.Attribute("Id").Value;
- portConfig.BaudRate = xElement.Element("BaudRate").Value;
- portConfig.DataBits = xElement.Element("DataBits").Value;
- portConfig.Paritys = xElement.Element("Paritys").Value;
- portConfig.StopBits = xElement.Element("StopBits").Value;
- portConfig.HandShaking = xElement.Element("HandShaking").Value;
- }
- xDom.Save(FilePath);
- return portConfig;
- }
- /// <summary>
- /// 增加端口配置
- /// </summary>
- /// <param name="portName"></param>
- public void EditSerialPort(PortConfig portConfig)
- {
- XDocument xDom = XDocument.Load(FilePath);
- var ports = from p in xDom.Root.Elements("PortName") where p.Attribute("Id").Value == portConfig.PortName select p;
- if (ports.Count() > 0)
- {
- XElement xElement = ports.First<XElement>();
- xElement.Attribute("Id").Value = portConfig.PortName;
- xElement.Element("BaudRate").Value = portConfig.BaudRate;
- xElement.Element("DataBits").Value = portConfig.DataBits;
- xElement.Element("Paritys").Value = portConfig.Paritys;
- xElement.Element("StopBits").Value = portConfig.StopBits;
- xElement.Element("HandShaking").Value = portConfig.HandShaking;
- }
- xDom.Save(FilePath);
- }
- /// <summary>
- /// 判断端口配置是否存在
- /// </summary>
- /// <param name="portName"></param>
- /// <returns></returns>
- public bool Exist(string portName)
- {
- XDocument xDom = XDocument.Load(FilePath);
- var ports = from p in xDom.Root.Elements("PortName") where p.Attribute("Id").Value == portName select p;
- if (ports.Count() > 0)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- /// <summary>
- /// 判断文件是否存在
- /// </summary>
- /// <param name="FilePath"></param>
- public void fileIsExist(string FilePath)
- {
- if (!File.Exists(FilePath))
- {
- XDocument xDom = new XDocument();
- xDom.Add(new XElement("SerialPorts"));
- xDom.Save(FilePath);
- }
- }
- }
- }