【转】http://blog.csdn.net/u011866450/article/details/50373222

 using System.Xml;
using System.Data;
namespace DotNet.Utilities
{
/// <summary>
/// Xml的操作公共类
/// </summary>
public class XmlHelper
{
#region 字段定义
/// <summary>
/// XML文件的物理路径
/// </summary>
private string _filePath = string.Empty;
/// <summary>
/// Xml文档
/// </summary>
private XmlDocument _xml;
/// <summary>
/// XML的根节点
/// </summary>
private XmlElement _element;
#endregion
#region 构造方法
/// <summary>
/// 实例化XmlHelper对象
/// </summary>
/// <param name="xmlFilePath">Xml文件的相对路径</param>
public XmlHelper(string xmlFilePath)
{
//获取XML文件的绝对路径
_filePath = SysHelper.GetPath(xmlFilePath);
}
#endregion
#region 创建XML的根节点
/// <summary>
/// 创建XML的根节点
/// </summary>
private void CreateXMLElement()
{
//创建一个XML对象
_xml = new XmlDocument();
if (DirFile.IsExistFile(_filePath))
{
//加载XML文件
_xml.Load(this._filePath);
}
//为XML的根节点赋值
_element = _xml.DocumentElement;
}
#endregion
#region 获取指定XPath表达式的节点对象
/// <summary>
/// 获取指定XPath表达式的节点对象
/// </summary>
/// <param name="xPath">XPath表达式,
/// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
/// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
/// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
/// </param>
public XmlNode GetNode(string xPath)
{
//创建XML的根节点
CreateXMLElement();
//返回XPath节点
return _element.SelectSingleNode(xPath);
}
#endregion
#region 获取指定XPath表达式节点的值
/// <summary>
/// 获取指定XPath表达式节点的值
/// </summary>
/// <param name="xPath">XPath表达式,
/// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
/// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
/// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
/// </param>
public string GetValue(string xPath)
{
//创建XML的根节点
CreateXMLElement();
//返回XPath节点的值
return _element.SelectSingleNode(xPath).InnerText;
}
#endregion
#region 获取指定XPath表达式节点的属性值
/// <summary>
/// 获取指定XPath表达式节点的属性值
/// </summary>
/// <param name="xPath">XPath表达式,
/// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
/// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
/// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
/// </param>
/// <param name="attributeName">属性名</param>
public string GetAttributeValue(string xPath, string attributeName)
{
//创建XML的根节点
CreateXMLElement();
//返回XPath节点的属性值
return _element.SelectSingleNode(xPath).Attributes[attributeName].Value;
}
#endregion
#region 新增节点
/// <summary>
/// 1. 功能:新增节点。
/// 2. 使用条件:将任意节点插入到当前Xml文件中。
/// </summary>
/// <param name="xmlNode">要插入的Xml节点</param>
public void AppendNode(XmlNode xmlNode)
{
//创建XML的根节点
CreateXMLElement();
//导入节点
XmlNode node = _xml.ImportNode(xmlNode, true);
//将节点插入到根节点下
_element.AppendChild(node);
}
/// <summary>
/// 1. 功能:新增节点。
/// 2. 使用条件:将DataSet中的第一条记录插入Xml文件中。
/// </summary>
/// <param name="ds">DataSet的实例,该DataSet中应该只有一条记录</param>
public void AppendNode(DataSet ds)
{
//创建XmlDataDocument对象
XmlDataDocument xmlDataDocument = new XmlDataDocument(ds);
//导入节点
XmlNode node = xmlDataDocument.DocumentElement.FirstChild;
//将节点插入到根节点下
AppendNode(node);
}
#endregion
#region 删除节点
/// <summary>
/// 删除指定XPath表达式的节点
/// </summary>
/// <param name="xPath">XPath表达式,
/// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
/// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
/// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
/// </param>
public void RemoveNode(string xPath)
{
//创建XML的根节点
CreateXMLElement();
//获取要删除的节点
XmlNode node = _xml.SelectSingleNode(xPath);
//删除节点
_element.RemoveChild(node);
}
#endregion //删除节点
#region 保存XML文件
/// <summary>
/// 保存XML文件
/// </summary>
public void Save()
{
//创建XML的根节点
CreateXMLElement();
//保存XML文件
_xml.Save(this._filePath);
}
#endregion //保存XML文件
#region 静态方法
#region 创建根节点对象
/// <summary>
/// 创建根节点对象
/// </summary>
/// <param name="xmlFilePath">Xml文件的相对路径</param>
private static XmlElement CreateRootElement(string xmlFilePath)
{
//定义变量,表示XML文件的绝对路径
string filePath = "";
//获取XML文件的绝对路径
filePath = SysHelper.GetPath(xmlFilePath);
//创建XmlDocument对象
XmlDocument xmlDocument = new XmlDocument();
//加载XML文件
xmlDocument.Load(filePath);
//返回根节点
return xmlDocument.DocumentElement;
}
#endregion
#region 获取指定XPath表达式节点的值
/// <summary>
/// 获取指定XPath表达式节点的值
/// </summary>
/// <param name="xmlFilePath">Xml文件的相对路径</param>
/// <param name="xPath">XPath表达式,
/// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
/// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
/// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
/// </param>
public static string GetValue(string xmlFilePath, string xPath)
{
//创建根对象
XmlElement rootElement = CreateRootElement(xmlFilePath);
//返回XPath节点的值
return rootElement.SelectSingleNode(xPath).InnerText;
}
#endregion
#region 获取指定XPath表达式节点的属性值
/// <summary>
/// 获取指定XPath表达式节点的属性值
/// </summary>
/// <param name="xmlFilePath">Xml文件的相对路径</param>
/// <param name="xPath">XPath表达式,
/// 范例1: @"Skill/First/SkillItem", 等效于 @"//Skill/First/SkillItem"
/// 范例2: @"Table[USERNAME='a']" , []表示筛选,USERNAME是Table下的一个子节点.
/// 范例3: @"ApplyPost/Item[@itemName='岗位编号']",@itemName是Item节点的属性.
/// </param>
/// <param name="attributeName">属性名</param>
public static string GetAttributeValue(string xmlFilePath, string xPath, string attributeName)
{
//创建根对象
XmlElement rootElement = CreateRootElement(xmlFilePath);
//返回XPath节点的属性值
return rootElement.SelectSingleNode(xPath).Attributes[attributeName].Value;
}
#endregion
#endregion
public static void SetValue(string xmlFilePath, string xPath, string newtext)
{
//string path = SysHelper.GetPath(xmlFilePath);
//var queryXML = from xmlLog in xelem.Descendants("msg_log")
// //所有名字为Bin的记录
// where xmlLog.Element("user").Value == "Bin"
// select xmlLog;
//foreach (XElement el in queryXML)
//{
// el.Element("user").Value = "LiuBin";//开始修改
//}
//xelem.Save(path);
}
}
}

(三)XmlHelper的更多相关文章

  1. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  2. WCF学习之旅—第三个示例之三(二十九)

    上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...

  3. WCF学习之旅—第三个示例之五(三十一)

       上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九) WCF学习 ...

  4. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

  5. WCF学习之旅——第一个WCF示例(三)

    第五步:创建客户端 WCF应用服务被成功寄宿后,WCF服务应用便开始了服务调用请求的监听工作.此外,服务寄宿将服务描述通过元数据的形式发布出来,相应的客户端就可以获取这些元数据.接下来我们来创建客户端 ...

  6. C#基本语法<三>_WindowsFrom

    winform 在windows form开发过程中还是有很多坑需要注意,包括一些重要代码记不得,在这个文件中进行汇总更新. 命名规则 M结尾表示model A结尾表示消息 Object表示 ,底层接 ...

  7. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  8. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  9. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

随机推荐

  1. windows 应用商店应用笔记

    xaml http://www.cnblogs.com/free722/archive/2011/11/06/2238073.html win8 http://blog.csdn.net/ygzk12 ...

  2. Android Studio 经常使用功能介绍

    为了简化 Android 的开发力度,Google 决定将重点建设 Android Studio 工具.Google 会在今年年底停止支持其它集成开发环境.比方 Eclipse. Android St ...

  3. 字节对齐导致的iOS EXC_ARM_DA_ALIGN崩溃

    本文原链接: http://www.cnblogs.com/zouzf/p/4455167.html 先看一下这个链接:http://www.cnblogs.com/ren54/archive/201 ...

  4. JIRA数据库切换(HSQL Database到MySQL)

    没试过的版本,但是看着靠谱: 注:如果你之前配置过hsql版本,这次修改mysql数据操作会导致配置数据丢失,所以请注意备份 一. 创建名为jiradb的mysql数据,编码格式为utf-8 二.修改 ...

  5. c# dataGridview的Cellclick移除事件

    private void gvMoldInfo_CellClick(object sender, DataGridViewCellEventArgs e) { ) return; string col ...

  6. IBM X3650 M4服务器安装centos找不到硬盘的解决方法

    IBM X3650 M4是IBM新的2U的服务器,IBM服务器以高稳定性和卓越的性能一直领先其他的服务器品牌成为全球第一.但是我们在用IBM的最新版9.4引导盘引导的时候,里面选项只有windows ...

  7. 优化LibreOffice如此简单

    对于开源软件的支持者和粉丝来说,LibreOffice 无疑是 Microsoft Office 的最佳替代品,而且它已在过去的许多版本迭代中迎来了许多巨大改进.然而,通过用户的手动配置,我们还是有办 ...

  8. 【翻译】C# Tips & Tricks: Weak References - When and How to Use Them

    原文:C# Tips & Tricks: Weak References - When and How to Use Them Sometimes you have an object whi ...

  9. [IR] Boolean retrieval

    How to build Inverted Index? 1. Token sequence. 2. Sort by terms. 3. Dictionary & Postings code ...

  10. Transact-SQL 示例 - 使用脚本备份数据库的示例

    在常规的数据库开发与维护的过程中,常常需要对数据库进行数据备份,最入门的办法就是使用SSMS图形化界面提供的数据库备份向导一步一步操作进行备份,这种方式虽然简单快捷但是日子久了就会觉得重复且繁琐.下面 ...