有些时候我们需要将一些常用的参数写到配置文件中以便读取,常用的配置文件有json、ini、xml等等,今天我们一起看一下xml的操作:
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<Configure>
<First>
<SqlServerInstanceName>
</SqlServerInstanceName>
<SqlServerDataBaseName>qweqweqwe.mdb</SqlServerDataBaseName>
<DataBasePath>C:\Test</DataBasePath>
<InstrumentPath>C:\Test\eeee</InstrumentPath>
<IpAndPort>
</IpAndPort>
<ComPort>
</ComPort>
<BaudRate>
</BaudRate>
</First>
</Configure>
读取方法封装:
#region 读取xml获取指定节点所有内容
/// <summary>
/// 获取指定节点所有内容
/// </summary>
/// <param name="path">文件位置</param>
/// <param name="TwoNode">二级父节点名称</param>
/// <param name="ThreeNode">三级节点名称</param>
/// <returns></returns>
public (bool, XmlNode,string) ReadXMLNode(string Filepath, string Node)
{
string portName = string.Empty;
try
{
XmlDocument xml = new XmlDocument();
//打开一个xml
xml.Load(Filepath);
//选择匹配 XPath 表达式的第一个 XmlNode
XmlNode Configure = xml.SelectSingleNode(Node);
return (true, Configure,"");
}
catch (Exception ex)
{
return (false, null,ex.Message);
}
}
#endregion
#region 读取XML配置信息获取指定节点内容
/// <summary>
/// 读取XML配置信息获取指定节点内容
/// </summary>
/// <param name="path">文件位置</param>
/// <param name="TwoNode">二级父节点名称</param>
/// <param name="ThreeNode">三级节点名称</param>
/// <returns></returns>
public (bool,string) ReadXMLNodeContent(string Filepath, string Node)
{
string portName = string.Empty;
try
{
XmlDocument xml = new XmlDocument();
//打开一个xml
xml.Load(Filepath);
//选择匹配 XPath 表达式的第一个 XmlNode
XmlNode Configure = xml.SelectSingleNode(Node);
//读取节点数据
if (Configure != null)
{
portName = Configure.InnerXml;
}
return (true, portName);
}
catch (Exception ex)
{
portName = ex.Message;
return (false, portName);
}
}
#endregion
调用读取的方法
private bool ReadLocalSetUpFile()
{
var (result, value, msg) = ReadXMLNode($@"D:\settings.xml", $"Configure/First");//在这里指定文件 指定节点
if (result)
{
XmlNode node = value;
if (node != null)
{
foreach (XmlNode item in node.ChildNodes)
{
switch (item.Name)
{
case "SqlServerInstanceName": InstanceName_text.Text = item.InnerText; break;
case "SqlServerDataBaseName": DataBaseName_text.Text = item.InnerText; break;
case "DataBasePath": DatabasePath_text.Text = item.InnerText; break;
case "InstrumentPath": InstrumentPath_text.Text = item.InnerText; break;
case "IpAndPort": IpAndPort_text.Text = item.InnerText; break;
case "ComPort": ComPort_text.Text = item.InnerText; break;
case "BaudRate": BaudRate_text.Text = item.InnerText; break;
}
}
}
return true;
}
else {
MessageBox.Show("加载配置信息失败:" + msg);
return false;
}
}
public string ReadContent(){
var (Result,Content)=ReadXMLNodeContent($@"D:\settings.xml", $"Configure/First/SqlServerInstanceName");
}
修改xml文件
private (bool, string) SaveXmlSetUp(string NodeName, string SetUpJson)
{
if (string.IsNullOrWhiteSpace(SetUpJson)) return (false, "值不能为空");
try
{
string FilePath = $@"D:\settings.xml";
XmlDocument xmlDoc = new XmlDocument();
if (File.Exists(FilePath))
{//判断文件是否存在 存在则修改
xmlDoc.Load(FilePath);
//读取二级节点 如果不存在则新增二级节点
XmlNode 二级 = xmlDoc.SelectSingleNode($"Configure/{NodeName}");
if (二级 == null)
{
XmlNode memberlist = xmlDoc.SelectSingleNode($"Configure");
XmlElement lq = xmlDoc.CreateElement(NodeName);
memberlist.AppendChild(lq);
}
//读取节点数据
if (二级 != null)
{//将二级节点的数据删掉 重新把节点数据添加进去
//二级.RemoveAll();//也可以直接把二级节点的所有数据全部删掉 这里只删除部分节点
XmlNode node = xmlDoc.SelectSingleNode($"Configure/{NodeName}/CheckItemSetUp");
if (node!=null) 二级.RemoveChild(node);
}
//创建三级节点 为三级赋值
XmlElement el1 = xmlDoc.CreateElement("CheckItemSetUp");
el1.InnerText = SetUpJson;
//将三级节点添加到二级节点下
XmlNode 二级节点 = xmlDoc.SelectSingleNode($"Configure/{NodeName}");
二级节点.AppendChild(el1);
//保存
xmlDoc.Save(FilePath);
}
else
{//如果xml文件不存在则创建xml文件
//加入XML的声明段落,Save方法不再xml上写出独立属性
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null));
//加入根元素
XmlElement root = xmlDoc.CreateElement("Configure");
xmlDoc.AppendChild(root);
//创建二级节点
XmlElement memberlist = xmlDoc.CreateElement($"{NodeName}");
//创建三级节点
XmlElement el1 = xmlDoc.CreateElement("SqlServerInstanceName");
el1.InnerText = SetUpJson;
//将三级节点添加到二级节点下
memberlist.AppendChild(el1);
root.AppendChild(memberlist);
xmlDoc.Save(FilePath);
}
return(true,"");
}
catch (Exception ex)
{
return (false, ex.Message);
}
}