C#操作XML.
2008-09-18 10:11
411 查看
在写一个串口通信的时候用到的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);
}
}
}
}
功能:对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);
}
}
}
}
相关文章推荐
- C#操作xml例子
- 学习C#之SAX方式操作XML文档
- C#操作Xml:通过XmlDocument读写Xml文档
- C#操作XML方法集合
- 在C#.net中如何操作XML
- C#操作xml SelectNodes,SelectSingleNode总是返回NULL 与 xPath 介绍
- 简单C#操作XML例子
- ASP.NET和C#中对XML的操作,以及简单的xml与xsl !
- C#操作XML小结(转)
- C#操作XML
- C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)
- C#操作XML小结
- C# XML基本操作
- C#操作XML小结_转载
- unity3d操作XML(C#)
- .NET下使用C#操作XML文件
- [导入]在C#.net中如何操作XML
- C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)
- 在C#.net中如何操作XML
- c# 操作Xml中SelectSingleNode方法中的xpath用法