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

C# 操作Xml

2017-05-24 17:05 155 查看
在我们项目的开发中,会常常对Xml文件进行操作,以下是我总结的几个基本操作的方法:

1、装载Xml文件

XmlDocument xmldoc;

//装载Xml文件
public void LoadXml()
{
/*
* 1、判断该路径是否存在着Person.xml文件,如不存在则创建
* 2、加载Person.xml
*/

if (!File.Exists(path))
{
CreateFile();
return;
}

xmldoc = new XmlDocument();
xmldoc.Load(path);
}


2、创建XMl文档

//创建xml文件
public void CreateFile()
{
xmldoc = new XmlDocument();

//1、创建段落声明<?xml version="1.0" encoding="GB2312" standalone="yes"?>
XmlDeclaration xDec = xmldoc.CreateXmlDeclaration("1.0", "GB2312", "yes");
xmldoc.AppendChild(xDec);
//2、创建根节点Persons
XmlNode rootNode = xmldoc.CreateElement("Persons");
xmldoc.AppendChild(rootNode);

xmldoc.Save(path);
}


3、读取Xml文档中的数据(PerModel是一个实体类)

public void ReadXml()
{
LoadXml();

List<PerModel> listper = new List<PerModel>();

//获取根节点Persons
XmlNode rootNode = xmldoc.SelectSingleNode("Persons");
//获取所有的Person元素
XmlNodeList xnl = rootNode.ChildNodes;
if (xnl != null && xnl.Count > 0)
{
foreach (XmlNode xn in xnl)
{
XmlElement xe = (XmlElement)xn;
PerModel per = new PerModel();//PerModel是一个实体类
per.Name = xe.GetAttribute("Mz");//获取属性值
per.Sfzjh = xe.GetAttribute("Zjh");//获取属性值

XmlNodeList xnl2 = xe.ChildNodes;
per.Age = xnl2.Item(0).InnerText.ToString().Trim();
per.Sex = xnl2.Item(1).InnerText.ToString().Trim();
per.Adress = xnl2.Item(2).InnerText.ToString().Trim();

listper.Add(per);
}
}
dgv.DataSource = null;
dgv.DataSource = listper;
}


4、对Xml文档插入数据

//新增节点
public void AddNode(string Mz, string Zjh, string Nl, string Xb, string Dz)
{
LoadXml();
//获取根节点
XmlNode rootNode = xmldoc.SelectSingleNode("Persons");
//创建子节点Person
XmlElement pele = xmldoc.CreateElement("Person");
//Person的两个属性Mz ,Zjh
pele.SetAttribute("Mz", Mz);
pele.SetAttribute("Zjh", Zjh);

//创建新元素 Nl
XmlElement nlEle = xmldoc.CreateElement("Nl");
nlEle.InnerText = Nl;
pele.AppendChild(nlEle);

//创建新元素 Xb
XmlElement xbEle = xmldoc.CreateElement("Xb");
xbEle.InnerText = Xb;
pele.AppendChild(xbEle);

//创建新元素 Dz
XmlElement dzEle = xmldoc.CreateElement("Dz");
dzEle.InnerText = Dz;
pele.AppendChild(dzEle);

//添加Person节点
rootNode.AppendChild(pele);
xmldoc.Save(path);
}


5、修改xml文档数据

public void UpdateXml()
{
LoadXml();

XmlNode rootNode = xmldoc.SelectSingleNode("//Persons");
XmlElement xe = (XmlElement)rootNode.SelectSingleNode("//Persons/Person[@Zjh='" + dgv.CurrentRow.Cells[1].Value.ToString().Trim() + "']");
xe.SetAttribute("Mz", dgv.CurrentRow.Cells[0].Value.ToString().Trim());//除了修改属性值,也可以通过SetAttribute来增加一个属性
xe.GetElementsByTagName("Nl").Item(0).InnerText = dgv.CurrentRow.Cells[2].Value.ToString().Trim();
xe.GetElementsByTagName("Xb").Item(0).InnerText = dgv.CurrentRow.Cells[3].Value.ToString().Trim();
xe.GetElementsByTagName("Dz").Item(0).InnerText = dgv.CurrentRow.Cells[4].Value.ToString().Trim();

xmldoc.Save(path);
}


6、删除xml文档数据

public void DeleteXml()
{
LoadXml();

XmlNode rootNode = xmldoc.SelectSingleNode("//Persons");

//删除年龄大于5岁小于10岁的人
XmlNodeList xnl = rootNode.SelectNodes("//Persons/Person[Nl<'10' and Nl>'5']");
for (int i = 0; i < xnl.Count; i++)
{
xnl[i].ParentNode.RemoveChild(xnl[i]);
}

//删除属性‘Zjh’值为2017052202的节点
XmlNode xn  = rootNode.SelectSingleNode("//Persons/Person[@Zjh='2017052202']");
xn.ParentNode.RemoveChild(xn);

xmldoc.Save(path);
}


附完整源码,及运行效果图:

namespace Test_XML
{
/// <summary>
/// Person实体类
/// </summary>
[Serializable]
public class PerModel
{
/// <summary>
/// 姓名
/// </summary>
public string Name { get; set; }

/// <summary>
/// 证件号
/// </summary>
public string Sfzjh { get;set;}

/// <summary>
/// 年龄
/// </summary>
public string Age { get; set; }

/// <summary>
/// 性别
/// </summary>
public string Sex { get; set; }

/// <summary>
/// 家庭地址
/// </summary>
public string Adress { get; set; }
}
}


PerModel实体类

运行效果图:

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