.NET 对 XML 进行创建,增加,删除,修改操作整理

前言:

  最近做了一个项目,程序A在一个服务器程序B在另一台服务器,然而主程序A需要访问程序B的图片集文件夹下载到本服务器上,为了防止多次对Web Services进行调用,在主程序A中创建一个XML文件用于记录图片集中的某张图片是否下载过,如果下载就不需调用,没下载就需要调用服务。我也是枚小菜鸟,之前重来没写过XML文件这一块,于是翻书(C# 高级编程 第10版 Christian Nagel著)上网查资料,终于整理出来一套自己能用得上对XML读写等操作的笔记。为了学习和分享决定放在自己的博客中,以后遇到类似问题可以进行巩固,如果那里写的有误希望读者留言加以改正,接下来看我实现的步骤。

需要引用的命名空间:

using System.IO;
using System.Xml;

1.创建XML文件

        private void createXml(string xmlPath)            //创建train的xml文件
{
if (!File.Exists(xmlPath)) //判断是否创建过xml文件
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("<?xml version='1.0' encoding='gb2312' ?>" +
"<train>" +
"</train>");
doc.Save(xmlPath);
}
}

.NET 对 XML 进行创建,增加,删除,修改操作整理

2.插入元素

     private void addXmlNode(string BatchId, string BatchName, string BatchNo,string xmlPath)           //增加节点 (培训批次id,培训批次名称,图片编号集合,XML路径)
{
XmlDocument xmldoc = new XmlDocument(); //实例一个xml文件
xmldoc.Load(xmlPath); //读取xml文件 XmlNode train = xmldoc.SelectSingleNode("train"); //查找train XmlElement el = xmldoc.CreateElement("trainbatch"); //创建一个trainbatch
el.SetAttribute("Name", BatchName); //添加属性 XmlElement elBatchId = xmldoc.CreateElement("BatchId"); //创建<trainbatch>节点的第一个下级节点
elBatchId.InnerText = BatchId; //赋值
el.AppendChild(elBatchId); //追加到trainbatch下 XmlElement elBatchName = xmldoc.CreateElement("BatchName");
elBatchName.InnerText = BatchName;
el.AppendChild(elBatchName); XmlElement elBatchNo = xmldoc.CreateElement("BatchNo"); //创建<trainbatch>节点的第二个下级节点
elBatchNo.InnerText = BatchNo; //赋值
el.AppendChild(elBatchNo); //追加到trainbatch下 train.AppendChild(el); //所有添加元素追加到根目录下
xmldoc.Save(xmlPath);
}

.NET 对 XML 进行创建,增加,删除,修改操作整理

3.修改第一个trainbatch节点下的BatchNo的值

        private void updateXmlNode(string BatchId, string BatchNo,string xmlPath)           //修改xml文件  (培训批次id,将要修改的图片编号集合,XML路径)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlPath); XmlNodeList titleNodes = xmldoc.SelectSingleNode("train").ChildNodes; //获取train下一层的节点
foreach (XmlNode node in titleNodes) //循环所有trainbatch节点
{
XmlElement el = (XmlElement)node.ChildNodes[]; //获取第一个节点值
if (el.InnerText == BatchId) //判断第一个trainbatch的id是否等于将要修改的id
{
node.ChildNodes[].InnerText = BatchNo; //给第三个节点赋值
xmldoc.Save(xmlPath); //保存(不要忘记这步骤哦)
break;
}
}
}

.NET 对 XML 进行创建,增加,删除,修改操作整理

4.获取第一个trainbatch节点下的BatchNo值

        private string getXmlNodeValue(string BatchId,string xmlPath)              //获取某次培训是否记录在xml
{
XmlDocument xmldoc = new XmlDocument(); //实例化XML文档
xmldoc.Load(xmlPath); //加载将要打开的文档 string result = "";
XmlNodeList titleNodes = xmldoc.SelectSingleNode("train").ChildNodes; //获取train下一层的节点
foreach (XmlNode node in titleNodes) //循环所有的trainbatch节点
{
XmlElement el = (XmlElement)node.ChildNodes[]; //获取trainbatch下的第一个节点元素
if (el.InnerText == BatchId)
{
result = node.ChildNodes[].InnerText.ToString(); //返回trainbatch下的第三个节点元素
return result;
}
}
return result;
}

.NET 对 XML 进行创建,增加,删除,修改操作整理

5.根据条件删除trainbatch节点

        private void deleteXmlNode(string BatchName, string xmlPath)                     //删除某个节点元素
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlPath); XmlNodeList titleNodes = xmldoc.SelectSingleNode("train").ChildNodes; //获取train下一层的节点
foreach (XmlNode node in titleNodes)
{
XmlElement el = (XmlElement)node;
if (el.GetAttribute("Name") == BatchName) //el.GetAttribute 获取trainbatch属性
{
el.RemoveAll(); //删除当前元素和所有子元素
xmldoc.Save(xmlPath);
break;
}
}
}

.NET 对 XML 进行创建,增加,删除,修改操作整理

6.XML转义字符

&lt;

<

小于

&gt;

>

大于

&amp;

&

和号

&apos;

'

单引号

&quot;

"

引号

最后分享一下调用方法的代码部分:

        protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string xmlPath = Server.MapPath("TestXml.xml"); //XML路径地址 createXml(xmlPath); //创建XML文件 addXmlNode("", "ASP.NET培训第一期", "123,134,454,789,454,315,456", xmlPath); //插入第一个节点
addXmlNode("", "ASP.NET培训第二期", "0123,0134,0454,0789,0454,0315,0456", xmlPath); //插入第二个节点
addXmlNode("", "ASP.NET培训第三期", "0123,0134,0454,0789,0454,0315,0456", xmlPath); //插入第三个节点
addXmlNode("", "ASP.NET培训第四期", "0123,0134,0454,0789,0454,0315,0456", xmlPath); //插入第四个节点 string result = getXmlNodeValue("", xmlPath); //获取节点值 updateXmlNode("", "0123,0134,0454,0789,0454,0315,0456", xmlPath); //修改节点值 deleteXmlNode("ASP.NET培训第二期", xmlPath); //删除节点
}
}
上一篇:2016 - 2 - 20 ARC知识总结(二 autorelease概念及实现)


下一篇:资源: StaticResource, ThemeResource