类名: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文件的创建,修改,删除相关推荐

  1. C# xml文件的创建,修改和添加节点 。

    最近在做一个项目,设计到xml文件的传输,所以就研究了一下. ,.NET Framework完全支持XML DOM模式,但它不支持SAX模式..NET Framework支持两种不同的分析模式:XML ...

  2. libxml2对XML文件的创建、解析、查找、修改

    一.Libxml2介绍: Libxml2 是一个xml的c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件.它除了支持c语言版以外,还支持c++.PHP ...

  3. Linux目录、文件的创建与删除

    目录的创建: mkdir - make directories 使用示例及说明: [root@localhost ~]# mkdir /root/x/y/z mkdir: cannot create ...

  4. MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制

    /*进阶 11 DDL 数据库定义语言库和表的管理一:库的管理:创建/修改/删除二:表的管理:创建/修改/删除创建: CREATE DATABASE [IF NOT EXISTS] 库名;修改: al ...

  5. mysql利用触发器删除数据库_[数据库]mysql 触发器的创建 修改 删除

    [数据库]mysql 触发器的创建 修改 删除 0 2015-12-16 23:00:04 //做一个简单的练习,创建一个简单的触发器 完成添加文章的时候,自动加上时间,默认作者 为 '日记本的回忆' ...

  6. Linux目录和文件的创建与删除

    Linux下文件&目录创建与删除 这里写目录标题 Linux下文件&目录创建与删除 1.文件的创建 常见的创建文件的几种命令 2.创建目录 3.删除文件及目录的命令:rm 1.文件的创 ...

  7. Qt操作XML文件(创建,读,写,修改,添加,删除)

    XML文件在项目开发的过程中经常用的,比如配置文件基本上都是XML格式的,本文介绍在Qt环境下操作XML文件,具体用法看代码 原txt文件内容,在 http://www1.jctrans.com/to ...

  8. 创建maven项目生成WebRoot目录,web.xml文件,以及修改编译路径classess的解决办法,以及解决找不到或无法加载主类的问题。

    创建maven工程:首先File-->New-->Maven Project到下边界面: 点击Next到以下界面: 点击Next进入以下界面: 输入Group Id.Artiface Id ...

  9. C# xml文件读取与修改

    c#读写xml文件 已知有一个XML文件(bookstore.xml)如下: Code<?xml version="1.0" encoding="gb2312&qu ...

最新文章

  1. android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
  2. 密恐警告:超2000万张,全球最大的人眼图像数据集开源了
  3. Android备份和添加短信
  4. 关于mtl_transactions_interface表序列
  5. 软考高项之各大管理计划内容-攻坚记忆
  6. iOS之深入解析消息转发objc_msgSend的应用场景
  7. 继承情况下构造方法的调用过程-java
  8. 能从入门到精通的 Docker 学习指南
  9. Hadoop源码篇--Reduce篇
  10. Linux不同发型版本(Debian REHL)与软件包管理器(RPM dpkg)的概念
  11. 转载--#define 用法
  12. 允许使用抽象类类型 isearchboxinfo 的对象_Java面向对象之final、abstract抽象、和变量生命周期...
  13. netkeeper客户端_Netkeeper校园客户端(创翼客户端)下载
  14. 51单片机串行口波特率计算
  15. labwindows mysql_LabWindows/CVI(二):基本代码框架函数说明
  16. mac开发者身份_如何以开发者的身份环游世界
  17. security update 补丁更新失败
  18. html设置旋转中心兼容ie,IE中的CSS旋转属性
  19. 启动报错:Caused by: org.apache.ibatis.binding.BindingException汇总解决
  20. tiktok为什么注册不成_tiktok抖音怎样注册?完整流程介绍

热门文章

  1. 计算机网络学习笔记(15. OSI参考模型③、TCP/IP参考模型)
  2. JavaScript学习(二十七)—解决IE以及IE8之前的浏览器下面的添加事件或者删除事件
  3. ad19做直插封装 ipc_AD19的IPC封装向导使用
  4. 面向切面编程:操作日志
  5. 1.5T和2.0L哪个好?
  6. 你三十岁有什么巨大变化吗?
  7. 养老金总额和个人账户本息总额啥区别,退休后按照哪个账户计算养老金呢?
  8. 如何使用ISO升级TrueNAS主要版本
  9. 地板之间出现缝隙如何处理?
  10. 为什么今年好多人开始买基金了,是疫情影响的吗?