【.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 = ; // 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 > )
{
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[]);
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(, strXmlPath.IndexOf(".")) + ".xsd";
DataSet ds = new DataSet();
//读xml架构,关系到列的数据类型
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
ds.ReadXml(GetXmlFullPath(strXmlPath));
DataTable dt = ds.Tables[];
//在原来的表格基础上创建新行
DataRow newRow = dt.NewRow();
//循环给一行中的各个列赋值
for (int i = ; 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(, strXmlPath.IndexOf(".")) + ".xsd";
DataSet ds = new DataSet();
//读xml架构,关系到列的数据类型
ds.ReadXmlSchema(GetXmlFullPath(strXsdPath));
ds.ReadXml(GetXmlFullPath(strXmlPath));
//先判断行数
if (ds.Tables[].Rows.Count > )
{
for (int i = ; i < ds.Tables[].Rows.Count; i++)
{
//如果当前记录为符合Where条件的记录
if (ds.Tables[].Rows[i][strWhereColumnName].ToString().Trim().Equals(strWhereColumnValue))
{
//循环给找到行的各列赋新值
for (int j = ; j < Columns.Length; j++)
{
ds.Tables[].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[].Rows.Count > )
{
//删除符号条件的行
ds.Tables[].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[].Rows.Count > )
{
//判断行多还是删除的值多,多的for循环放在里面
if (ColumnValue.Length > ds.Tables[].Rows.Count)
{
for (int i = ; i < ds.Tables[].Rows.Count; i++)
{
for (int j = ; j < ColumnValue.Length; j++)
{
if (ds.Tables[].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))
{
ds.Tables[].Rows[i].Delete();
}
}
}
}
else
{
for (int j = ; j < ColumnValue.Length; j++)
{
for (int i = ; i < ds.Tables[].Rows.Count; i++)
{
if (ds.Tables[].Rows[i][strColumn].ToString().Trim().Equals(ColumnValue[j]))
{
ds.Tables[].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[].Rows.Count > )
{
//移除所有记录
ds.Tables[].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(":") > )
{
return strPath;
}
else
{
//返回完整路径
return System.Web.HttpContext.Current.Server.MapPath(strPath);
}
}
#endregion }
}
【.NET】XML文件的创建,修改,删除的更多相关文章
- [转]C# FileSystemWatcher监控指定文件或目录的文件的创建、删除、改动、重命名等活动
觉得这个很常用..比如一些软件. http://www.rabbit8.cn/DoNet/407.html FileSystemWatcher控件主要功能: 监控指定文件或目录的文件的创建.删 ...
- Linux创建修改删除用户和组
Linux 创建修改删除用户和组 介绍 在日常的维护过程中创建用户操作用的相对会多一些,但是在这个过程中涉及到的知识点就不单单就是useradd了,接下来就来详细了解账号管理的相关信息. 用户信息 先 ...
- linux初级学习笔记二:linux操作系统及常用命令,文件的创建与删除和命名规则,命令行展开以及linux中部分目录的作用!(视频序号:02_3)
本节学习的命令:tree,mkdir,rmdir,touch,stat,rm 本节学习的技能:Linux中主要的目录作用以及特殊的目录文件: 文件的命名规则,命令行展开: 文件的创建与删除: Linu ...
- MySQL进阶11--DDL数据库定义语言--库创建/修改/删除--表的创建/修改/删除/复制
/*进阶 11 DDL 数据库定义语言 库和表的管理 一:库的管理:创建/修改/删除 二:表的管理:创建/修改/删除 创建: CREATE DATABASE [IF NOT EXISTS] 库名; 修 ...
- oracle11g创建修改删除表
oracle11g创建修改删除表 我的数据库名字: ORCL 密码:123456 1.模式 2.创建表 3.表约束 4.修改表 5.删除表 1.模式 set oracle_sid=OR ...
- java操作文件的创建、删除、遍历
java操作文件的创建.删除.遍历: package test; import java.io.File; import java.io.IOException; import java.util.A ...
- asp.net 实现对xml文件的 读取,添加,删除,修改
用于修改站内xml文件 已知有一个XML文件(bookstore.xml)如下:<?xml version="1.0" encoding="gb2312" ...
- delphi获取文件的创建/修改时间、按时间删除指定文件下的文件
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrl ...
- XML文件的创建和解析笔记
解析XML的四种方法 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这 ...
随机推荐
- iOS开发: 关于Certificate, Identifier & Profile
简介 苹果的iOS系统是封闭的系统.苹果的设计是保证每一个软件有确定的开发者/厂商(保证不被第三方进行未授权修改),只能在指定的设备上运行.为达到这些目标,苹果设计了一系列的机制. Certifica ...
- C# 数据库连接测试以及备份
现在我们要做一个如图5.1的数据库连接配置,从界面上看有三个功能需要实现:从配置文件中读取数据库连接的相关属性.备份数据库.测试连接. 现在我们就一个一个开始讲解. 图5.1 1.从配置文件中读取数据 ...
- 简洁AngularJS框架后台管理系统bootstrap后台模板
最近在做一个后台管理的项目,但是没有设计图完全,所以就发现一款非常不错的模版. 这个模版是基于 AngularJS 和 bootstrap 的后台管理系统模版. Minovate是 AngularJS ...
- Java项目中打开本地文件的方法
1:其中saveAddress 为已知本地文件全路径: Desktop.getDesktop().open(new File(saveAddress));
- bzoj1180,2843
1180: [CROATIAN2009]OTOCI Time Limit: 50 Sec Memory Limit: 162 MBSubmit: 967 Solved: 597[Submit][S ...
- trie树模板(统计难题)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- 创建ListView控件
// 创建List控件 HWND hListView = CreateWindow(WC_LISTVIEW ,/*listview 宏的名字*/ L"" ,/*窗口标题*/ WS_ ...
- hadoop端口配置指南
获取默认配置 配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知道这些配置文件有 ...
- SublimeText快捷键
在我做了一次包含一些现场编码的演示后,一些观众问我是如何操作这么快.当然这里没有唯一的答案,答案是一堆简单的快捷键和大量的实践的组合.为了回应那些询问,我觉得有必要看看我每天想都不用想且使用的快捷键. ...
- visual studio 中将选中代码相同的代码的颜色设置,修改高亮颜色
这是一个很实用的功能,默认的设置里不是很明显,设置完之后效果图如下: 具体设置方法是: 1. 菜单:工具 -> 选项 ->环境 ->字体和颜色 2. 在右边的 "显示 ...