【.NET】XML文件的创建,修改,删除
类名:XML
/// 1.创建XML文档 /// 2.在根节点下增加子元素 /// 3.在元素下增加子元素 /// 4.获取类型为制定值的一组节点 /// 5.抓取网页上的xml文档赋值给XmlDocument对象 /// 6.获取服务器上指定文件的xml文件内容 /// 7.读取xml直接返回DataSet /// 8.读取Xml返回一个经排序或筛选后的DataView /// 9.向Xml文件插入一行数据 /// 10.更行符合条件的一条Xml记录 /// 11.通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行 /// 12.删除strColumn列中值为ColumnValue的行 /// 13.删除所有行 /// 14.返回完整路径 using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.IO; using System.Data; using System.Data.SqlClient; using System.Net;namespace Tools {class XML{/// <summary>/// 创建XML文档/// </summary>/// <param name="name">根节点名称</param>/// <param name="type">根节点的一个属性值</param>/// <returns></returns>/// moss中调用方法:创建的文件如果要存到moss的文档库中,则:/// XmlDocument doc = XmlOperate.CreateXmlDocument("project", "T");/// 在此可嵌入增加子节点方法,如AddTaskNode(taskObj, ref doc); ../// byte[] fileContent = Encoding.UTF8.GetBytes(doc.OuterXml);/// folder.Files.Add("name.xml", fileContent, true);/// web.Update();/// .net中调用方法:写入文件中,则:/// document = XmlOperate.CreateXmlDocument("sex", "sexy");/// document.Save("c:/bookstore.xml"); public static XmlDocument CreateXmlDocument(string name, string type){XmlDocument doc = null;XmlElement rootEle = null;try{doc = new XmlDocument();doc.LoadXml("<" + name + "/>");rootEle = doc.DocumentElement;rootEle.SetAttribute("type", type);}catch (Exception er){throw er;}return doc;}/// <summary>/// 在根节点下增加子元素/// </summary>/// <param name="document"></param>/// <param name="nodeName"></param>/// <param name="type"></param>/// 调用方法:/// document = xmloper.CreateXmlDocument("animal", "carnivore");/// XmlOperate.AddNewNode1(ref document, "carnivore", "high");public static void AddNewNode1(ref XmlDocument document, string nodeName, string type){XmlElement taskEle = null;try{taskEle = document.CreateElement(nodeName);taskEle.SetAttribute("type", type);document.DocumentElement.AppendChild((XmlNode)taskEle);}catch (Exception ex){throw ex;}}/// <summary>/// 在元素下增加子元素/// </summary>/// <param name="element"></param>/// <param name="nodeName"></param>/// <param name="type"></param>/// 调用方法:/// XmlDocument document = new XmlDocument();/// 先取到相应的元素,然后调用该方法在该元素下增加子元素/// XmlElement root = (XmlElement)document.SelectSingleNode("//animal/third");/// XmlOperate.AddNewNode2(ref root,"thaw","boost investor confidence");///注意上面的"//animal/third"也可换成"workflow[@type='T' and @isSpecial='1']"这种形式用来获取带有相应属性的元素public static void AddNewNode2(ref XmlElement element, string nodeName, string type){XmlElement taskEle = null;try{taskEle = element.OwnerDocument.CreateElement(nodeName);taskEle.SetAttribute("type", type);element.AppendChild((XmlNode)taskEle);}catch (Exception ex){throw ex;}}/// <summary>/// 获取类型为制定值的一组节点/// </summary>/// <param name="type">类型值。E.G.workflow[@type='T' and @isSpecial='1']</param>/// <returns></returns>/// 注意:返回的 XmlNodeList 类型是个类似于arraylist的类型,所以要得到它的值只能遍历public static XmlNodeList GetDesiredNode(string type){XmlDocument document = new XmlDocument();return document.SelectNodes("type");}/// <summary>/// 抓取网页上的xml文档赋值给XmlDocument对象/// </summary>/// <param name="url">网页的url(网页的内容必须是xml格式的)</param>/// <returns></returns>public static XmlDocument GetXMLDocumentFromWebPage(string url){HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);myRequest.Method = "POST";myRequest.ContentType = "application/x-www-form-urlencoded";myRequest.ContentLength = 0;// Get response HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.Default);string content = reader.ReadToEnd();XmlDocument document = new XmlDocument();document.LoadXml(content);return document;}/// <summary>/// 获取服务器上指定文件的xml文件内容/// </summary>/// <param name="location"></param>/// <returns></returns>public static string GetXMLFile(string location){XmlDocument document = new XmlDocument();document.Load(@"G:\ttt.xml");return document.InnerXml;}//获取sharepoint中指定文件的内容//public string GetProjectWorkflowUrl(SPFile file)//{ // byte[] content = file.OpenBinary();// contentStr = Encoding.UTF8.GetString(content);// return contentStr; //}#region GetDataSetByXml/// <summary>/// 读取xml直接返回DataSet /// </summary>/// <param name="strXmlPath">xml文件相对路径</param>/// <returns></returns>public static DataSet GetDataSetByXml(string strXmlPath){try{DataSet ds = new DataSet();ds.ReadXml(GetXmlFullPath(strXmlPath));if (ds.Tables.Count > 0){return ds;}return null;}catch (Exception ){return null;}}#endregion#region GetDataViewByXml/// <summary>/// 读取Xml返回一个经排序或筛选后的DataView /// </summary>/// <param name="strXmlPath">xml文件相对路径</param>/// <param name="strWhere">筛选条件,如:"name = 'kgdiwss'"</param>/// <param name="strSort">排序条件,如:"Id desc"</param>/// <returns></returns> public static DataView GetDataViewByXml(string strXmlPath, string strWhere, string strSort){try{DataSet ds = new DataSet();ds.ReadXml(GetXmlFullPath(strXmlPath));DataView dv = new DataView(ds.Tables[0]);if (strSort != null){dv.Sort = strSort;}if (strWhere != null){dv.RowFilter = strWhere;}return dv;}catch (Exception){return null;}}#endregion#region WriteXmlByDataSet/// /// 向Xml文件插入一行数据 /// /// xml文件相对路径 /// 要插入行的列名数组,如:string[] Columns = {"name","IsMarried"}; /// 要插入行每列的值数组,如:string[] ColumnValue={"明天去要饭","false"}; /// 成功返回true,否则返回false public static bool WriteXmlByDataSet(string strXmlPath, string[] Columns, string[] ColumnValue){try{//根据传入的XML路径得到.XSD的路径,两个文件放在同一个目录下 string strXsdPath = strXmlPath.Substring(0, strXmlPath.IndexOf(".")) + ".xsd";DataSet ds = new DataSet();//读xml架构,关系到列的数据类型 ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));ds.ReadXml(GetXmlFullPath(strXmlPath));DataTable dt = ds.Tables[0];//在原来的表格基础上创建新行 DataRow newRow = dt.NewRow();//循环给一行中的各个列赋值 for (int i = 0; i < Columns.Length; i++){newRow[Columns[i]] = ColumnValue[i];}dt.Rows.Add(newRow);dt.AcceptChanges();ds.AcceptChanges();ds.WriteXml(GetXmlFullPath(strXmlPath));return true;}catch (Exception){return false;}}#endregion#region UpdateXmlRow/// /// 更行符合条件的一条Xml记录 /// /// XML文件路径 /// 列名数组 /// 列值数组 /// 条件列名 /// 条件列值 /// public static bool UpdateXmlRow(string strXmlPath, string[] Columns, string[] ColumnValue, string strWhereColumnName, string strWhereColumnValue){try{string strXsdPath = strXmlPath.Substring(0, strXmlPath.IndexOf(".")) + ".xsd";DataSet ds = new DataSet();//读xml架构,关系到列的数据类型 ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));ds.ReadXml(GetXmlFullPath(strXmlPath));//先判断行数 if (ds.Tables[0].Rows.Count > 0){for (int i = 0; i < ds.Tables[0].Rows.Count; i++){//如果当前记录为符合Where条件的记录 if (ds.Tables[0].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue)){//循环给找到行的各列赋新值 for (int j = 0; j < Columns.Length; j++){ds.Tables[0].Rows[i][Columns[j]] = ColumnValue[j];}//更新DataSet ds.AcceptChanges();//重新写入XML文件 ds.WriteXml(GetXmlFullPath(strXmlPath));return true;}}}return false;}catch (Exception){return false;}}#endregion#region DeleteXmlRowByIndex/// /// 通过删除DataSet中iDeleteRow这一行,然后重写Xml以实现删除指定行 /// /// /// 要删除的行在DataSet中的Index值 public static bool DeleteXmlRowByIndex(string strXmlPath, int iDeleteRow){try{DataSet ds = new DataSet();ds.ReadXml(GetXmlFullPath(strXmlPath));if (ds.Tables[0].Rows.Count > 0){//删除符号条件的行 ds.Tables[0].Rows[iDeleteRow].Delete();}ds.WriteXml(GetXmlFullPath(strXmlPath));return true;}catch (Exception){return false;}}#endregion#region DeleteXmlRows/// /// 删除strColumn列中值为ColumnValue的行 /// /// xml相对路径 /// 列名 /// strColumn列中值为ColumnValue的行均会被删除 /// public static bool DeleteXmlRows(string strXmlPath, string strColumn, string[] ColumnValue){try{DataSet ds = new DataSet();ds.ReadXml(GetXmlFullPath(strXmlPath));//先判断行数 if (ds.Tables[0].Rows.Count > 0){//判断行多还是删除的值多,多的for循环放在里面 if (ColumnValue.Length > ds.Tables[0].Rows.Count){for (int i = 0; i < ds.Tables[0].Rows.Count; i++){for (int j = 0; j < ColumnValue.Length; j++){if (ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j])){ds.Tables[0].Rows[i].Delete();}}}}else{for (int j = 0; j < ColumnValue.Length; j++){for (int i = 0; i < ds.Tables[0].Rows.Count; i++){if (ds.Tables[0].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j])){ds.Tables[0].Rows[i].Delete();}}}}ds.WriteXml(GetXmlFullPath(strXmlPath));}return true;}catch (Exception){return false;}}#endregion#region DeleteXmlAllRows/// /// 删除所有行 /// /// XML路径 /// public static bool DeleteXmlAllRows(string strXmlPath){try{DataSet ds = new DataSet();ds.ReadXml(GetXmlFullPath(strXmlPath));//如果记录条数大于0 if (ds.Tables[0].Rows.Count > 0){//移除所有记录 ds.Tables[0].Rows.Clear();}//重新写入,这时XML文件中就只剩根节点了 ds.WriteXml(GetXmlFullPath(strXmlPath));return true;}catch (Exception){return false;}}#endregion#region GetXmlFullPath/// /// 返回完整路径 /// /// Xml的路径 /// public static string GetXmlFullPath(string strPath){//如果路径中含有:符号,则认定为传入的是完整路径 if (strPath.IndexOf(":") > 0){return strPath;}else{//返回完整路径 return System.Web.HttpContext.Current.Server.MapPath(strPath);}}#endregion} }
转载于:https://www.cnblogs.com/chencsblog/p/3289119.html
【.NET】XML文件的创建,修改,删除相关推荐
- C# xml文件的创建,修改和添加节点 。
最近在做一个项目,设计到xml文件的传输,所以就研究了一下. ,.NET Framework完全支持XML DOM模式,但它不支持SAX模式..NET Framework支持两种不同的分析模式:XML ...
- libxml2对XML文件的创建、解析、查找、修改
一.Libxml2介绍: Libxml2 是一个xml的c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件.它除了支持c语言版以外,还支持c++.PHP ...
- Linux目录、文件的创建与删除
目录的创建: mkdir - make directories 使用示例及说明: [root@localhost ~]# mkdir /root/x/y/z mkdir: cannot create ...
- MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制
/*进阶 11 DDL 数据库定义语言库和表的管理一:库的管理:创建/修改/删除二:表的管理:创建/修改/删除创建: CREATE DATABASE [IF NOT EXISTS] 库名;修改: al ...
- mysql利用触发器删除数据库_[数据库]mysql 触发器的创建 修改 删除
[数据库]mysql 触发器的创建 修改 删除 0 2015-12-16 23:00:04 //做一个简单的练习,创建一个简单的触发器 完成添加文章的时候,自动加上时间,默认作者 为 '日记本的回忆' ...
- Linux目录和文件的创建与删除
Linux下文件&目录创建与删除 这里写目录标题 Linux下文件&目录创建与删除 1.文件的创建 常见的创建文件的几种命令 2.创建目录 3.删除文件及目录的命令:rm 1.文件的创 ...
- Qt操作XML文件(创建,读,写,修改,添加,删除)
XML文件在项目开发的过程中经常用的,比如配置文件基本上都是XML格式的,本文介绍在Qt环境下操作XML文件,具体用法看代码 原txt文件内容,在 http://www1.jctrans.com/to ...
- 创建maven项目生成WebRoot目录,web.xml文件,以及修改编译路径classess的解决办法,以及解决找不到或无法加载主类的问题。
创建maven工程:首先File-->New-->Maven Project到下边界面: 点击Next到以下界面: 点击Next进入以下界面: 输入Group Id.Artiface Id ...
- C# xml文件读取与修改
c#读写xml文件 已知有一个XML文件(bookstore.xml)如下: Code<?xml version="1.0" encoding="gb2312&qu ...
最新文章
- android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
- 密恐警告:超2000万张,全球最大的人眼图像数据集开源了
- Android备份和添加短信
- 关于mtl_transactions_interface表序列
- 软考高项之各大管理计划内容-攻坚记忆
- iOS之深入解析消息转发objc_msgSend的应用场景
- 继承情况下构造方法的调用过程-java
- 能从入门到精通的 Docker 学习指南
- Hadoop源码篇--Reduce篇
- Linux不同发型版本(Debian REHL)与软件包管理器(RPM dpkg)的概念
- 转载--#define 用法
- 允许使用抽象类类型 isearchboxinfo 的对象_Java面向对象之final、abstract抽象、和变量生命周期...
- netkeeper客户端_Netkeeper校园客户端(创翼客户端)下载
- 51单片机串行口波特率计算
- labwindows mysql_LabWindows/CVI(二):基本代码框架函数说明
- mac开发者身份_如何以开发者的身份环游世界
- security update 补丁更新失败
- html设置旋转中心兼容ie,IE中的CSS旋转属性
- 启动报错:Caused by: org.apache.ibatis.binding.BindingException汇总解决
- tiktok为什么注册不成_tiktok抖音怎样注册?完整流程介绍