xml(eXtensible Markup Language),可拓展标志性语言,可用来描述数据,是项目中经常用到也是十分重要的一种文件类型。
下面介绍一些基于c#对xml文档的基本操作。
添加引用。
using System.Xml;
using System.Xml.Linq;
using System.Collections.Generic;
首先,创建一个空的xml文档。
/// <summary>
/// 创建一个xml文档
/// </summary>
/// <param name="FileName">路径文件名带后缀</param>
/// <param name="root">根节点</param>
public void CreateXML(string FileName, string root)
{
XmlDocument XDoc = new XmlDocument();
XmlDeclaration declaration = XDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
XDoc.AppendChild(declaration);
XmlElement elem = XDoc.CreateElement(root);
XDoc.AppendChild(elem);
XDoc.Save(FileName);
}
获取xml文档的根节点
public string GetXmlRoot(string FileName)
{
XDocument doc = XDocument.Load(FileName);
XElement root = doc.Root;
return root.Name.ToString();
}
向xml文档中写入一级节点
public void WriteXML_FirstChildNode(string FileName, string FirstChildNode)
{
XmlDocument XDoc = new XmlDocument();
XDoc.Load(FileName);
//根节点
XmlNode elem = XDoc.SelectSingleNode(GetXmlRoot(FileName));
if (elem.SelectSingleNode(FirstChildNode) == null)
{
XmlElement elem1 = XDoc.CreateElement(FirstChildNode);
elem.AppendChild(elem1);
}
XDoc.Save(FileName);
}
向一级节点下写入二级节点
public void WriteXML_SecondChildNode(string FileName, string FirstChildNode, string SecondChildNode, string SecondChildNodevalue)
{
XmlDocument XDoc = new XmlDocument();
XDoc.Load(FileName);
//根节点
XmlNode elem = XDoc.SelectSingleNode(GetXmlRoot(FileName));
XmlNode elem2 = elem.SelectSingleNode(FirstChildNode);
if (elem2.SelectSingleNode(SecondChildNode) == null)
{
XmlElement elem1 = XDoc.CreateElement(SecondChildNode);
elem2.AppendChild(elem1);
}
XmlNode ele3 = elem2.SelectSingleNode(SecondChildNode);
ele3.InnerText = SecondChildNodevalue;
XDoc.Save(FileName);
}
删除某个一级节点
public void RemoveXml_FirstChildNode(string FileName, string FirstChildNode)
{
XmlDocument XDoc = new XmlDocument();
XDoc.Load(FileName);
//根节点
XmlNode elem = XDoc.SelectSingleNode(GetXmlRoot(FileName));
XmlNode elem1 = elem.SelectSingleNode(FirstChildNode);
elem.RemoveChild(elem1);
XDoc.Save(FileName);
}
删除一级节点下的每个二级节点
public void RemoveXml_SecondChildNode(string FileName, string FirstChildNode, string SecondChildNode)
{
XmlDocument XDoc = new XmlDocument();
XDoc.Load(FileName);
XmlNode elem = XDoc.SelectSingleNode(GetXmlRoot(FileName));
XmlNode elem1 = elem.SelectSingleNode(FirstChildNode);
XmlNode elem2 = elem1.SelectSingleNode(SecondChildNode);
elem1.RemoveChild(elem2);
XDoc.Save(FileName);
}
读取整个xml文档并在listbox中显示
public void ReadXml_All(string FileName, ListBox listBox)
{
listBox.Items.Clear();
listBox.Items.Add("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
XDocument doc = XDocument.Load(FileName);
XElement root = doc.Root;
listBox.Items.Add("<" + root.Name + ">");
IEnumerable<XElement> listnode = root.Elements();
foreach (XElement item in listnode)
{
listBox.Items.Add(" <" + item.Name + ">");
var nodes = item.Elements();
foreach (var noddd in nodes)
{
listBox.Items.Add(" " + noddd);
}
listBox.Items.Add(" </" + item.Name + ">");
}
listBox.Items.Add("</" + root.Name + ">");
}
获取一级节点下某个二级节点的值
public void ReadOne_SecondChildNodevalue(string FileName, string FirstChildNode, string SecondChildNode, out string SecondChildNodevalue)
{
SecondChildNodevalue = string.Empty;
XmlDocument XDoc = new XmlDocument();
XDoc.Load(FileName);
//根节点
XmlNode elem = XDoc.SelectSingleNode(GetXmlRoot(FileName));
//一级子节点
XmlNode elem1 = elem.SelectSingleNode(FirstChildNode);
XmlNode elem2 = elem1.SelectSingleNode(SecondChildNode);
if (elem2 == null)
{
MessageBox.Show("无此节点", "错误");
}
else
{
SecondChildNodevalue = elem2.InnerText.ToString();
}
}
修改一级节点下的某个二级节点的值
public void ReadOne_SecondChildNodeExvalue(string FileName, string FirstChildNode, string SecondChildNode, string SecondChildNodeValue)
{
XmlDocument XDoc = new XmlDocument();
XDoc.Load(FileName);
//根节点
XmlNode elem = XDoc.SelectSingleNode(GetXmlRoot(FileName));
//一级子节点
XmlNode elem1 = elem.SelectSingleNode(FirstChildNode);
XmlNode elem2 = elem1.SelectSingleNode(SecondChildNode);
elem2.InnerText = SecondChildNodeValue;
XDoc.Save(FileName);
}