您的位置:首页 > 编程语言 > C#

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);

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: