前言:
最近做了一个项目,程序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); ???????????} ???????}
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); ???????}
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[0]; ????????//获取第一个节点值 ???????????????if (el.InnerText == BatchId) ???????????//判断第一个trainbatch的id是否等于将要修改的id ???????????????{ ???????????????????node.ChildNodes[2].InnerText = BatchNo; ????????????//给第三个节点赋值 ???????????????????xmldoc.Save(xmlPath); ??????????????????????????????//保存(不要忘记这步骤哦) ???????????????????break; ???????????????} ???????????} ???????}
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[0]; ????????????????????????//获取trainbatch下的第一个节点元素 ???????????????if (el.InnerText == BatchId) ???????????????{ ???????????????????result = node.ChildNodes[2].InnerText.ToString(); ??????????????????//返回trainbatch下的第三个节点元素 ???????????????????return result; ???????????????} ????????????} ???????????return result; ???????}
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; ???????????????} ???????????} ????????}
6.XML转义字符
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ‘ | 单引号 |
" | " | 引号 |
最后分享一下调用方法的代码部分:
???????protected void Page_Load(object sender, EventArgs e) ???????{ ????????????if (!Page.IsPostBack) ???????????{ ???????????????string xmlPath = Server.MapPath("TestXml.xml"); ?????????????????????????//XML路径地址 ????????????????createXml(xmlPath); ?????????????????????????????????????????????????????//创建XML文件 ???????????????addXmlNode("1", "ASP.NET培训第一期", "123,134,454,789,454,315,456", xmlPath); ???????????????//插入第一个节点 ???????????????addXmlNode("2", "ASP.NET培训第二期", "0123,0134,0454,0789,0454,0315,0456", xmlPath); ????????//插入第二个节点 ???????????????addXmlNode("3", "ASP.NET培训第三期", "0123,0134,0454,0789,0454,0315,0456", xmlPath); ????????//插入第三个节点 ???????????????addXmlNode("4", "ASP.NET培训第四期", "0123,0134,0454,0789,0454,0315,0456", xmlPath); ????????//插入第四个节点 ???????????????string result = getXmlNodeValue("1", xmlPath); ??????????????????????????//获取节点值 ???????????????updateXmlNode("1", "0123,0134,0454,0789,0454,0315,0456", xmlPath); ??????//修改节点值 ???????????????deleteXmlNode("ASP.NET培训第二期", xmlPath); ????????????????????????????//删除节点 ???????????} ???????}
.NET 对 XML 进行创建,增加,删除,修改操作整理
原文地址:http://www.cnblogs.com/swjian/p/8035556.html