[系列目录](./XmlCatalog.html)

前言

本篇是这个系列的最后一篇。也是本人第一次写系列文章,虽然系列中大部分内容都是参考网络,但是自己都有敲代码验证。
自己再编写过程中也学习到了很多知识,以前都只是看,看过了也就忘记了,通过编写博客也算是作为自己的一个笔记,方便自己以后查找

XmlHepler

最后送给大家一个工具内裤(类库),废话不多少,直接上马

应用程序配置类型枚举

 #region 获取节点

         #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);
} /// <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 XmlNodeList GetNodeList(string xPath)
{
//创建XML的根节点
//CreateXMLElement(); //返回XPath节点
return _element.SelectNodes(xPath);
} #endregion 获取指定XPath表达式的节点对象 #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 获取指定XPath表达式节点的值 #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 获取指定XPath表达式节点的属性值 #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. 使用条件:将任意节点字符串插入到当前Xml文件中。
/// </summary>
/// <param name="name">节点名称</param>
/// <param name="InnerXml">节点内部字符串</param>
public void AppendNode(string name, string InnerXml)
{
//创建XML的根节点
//CreateXMLElement(); //导入节点
XmlNode node = _xml.CreateElement(name);
node.InnerXml = InnerXml; //将节点插入到根节点下
_element.AppendChild(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);
node.ParentNode.RemoveChild(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>
/// <param name="dicAttribute">属性字典</param>
public void EditElementAttribute(string xPath, Dictionary<string, string> dicAttribute)
{
XmlElement elmt = null;
//获取要修改的节点
XmlNode node = _xml.SelectSingleNode(xPath);
if (node.NodeType != XmlNodeType.Element)
{
throw (new Exception("XmlNodeType is Element Can SetAttribute!"));
}
else
{
elmt = (XmlElement)node;
}
//根据Dictionary设置属性
//遍历字典
foreach (KeyValuePair<string, string> kvp in dicAttribute)
{
elmt.SetAttribute(kvp.Key, kvp.Value);
}
} /// <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="innerText">内部文本</param>
public void EditNodeText(string xPath, string innerText)
{
//获取要修改的节点
XmlNode node = _xml.SelectSingleNode(xPath); node.InnerText = innerText;
} /// <summary>
/// 根据指定XPath表达式节点修改内部Xml
/// </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="innerText">内部Xml</param>
public void EditNodeXml(string xPath, string innerXml)
{
//获取要修改的节点
XmlNode node = _xml.SelectSingleNode(xPath); node.InnerXml = innerXml;
} #endregion 编辑节点

全部源码

XmlHelper源码

后记

花了一周左右的时间把这个系列写完,主要都是MaskDown语法编写,发现写起来真是很方便。
提取透露下下个系列准备写邮件相关

XmlHepler(拿去就能用)的更多相关文章

  1. 神马玩意,EntityFramework Core 1.1又更新了?走,赶紧去围观

    前言 哦,不搞SQL了么,当然会继续,周末会继续更新,估计写完还得几十篇,但是我会坚持把SQL更新完毕,绝不会烂尾,后续很长一段时间没更新的话,不要想我,那说明我是学习新的技能去了,那就是学习英语,本 ...

  2. 就这么漂来漂去---一个毕业三个月的java程序员的裸辞风波

    注:这并不是一篇技术文章,而是记录了我这几个月经历的入职,裸辞,找工作的心路历程,简单介绍一个博主的情况,我是16年毕业生,校招进了一家北京的公司,java开发,和很多年轻人一样,干了一段时间,我发现 ...

  3. 去IOE的一点反对意见以及其他

    某天在机场听见两老板在聊天,说到他们目前销售的报表老跟不上的问题,说要请一个人,专门合并和分析一些发过来的excel表格,我真想冲上去说,老板,你需要的是一个信息处理的系统,你需要咨询么.回来一直耿耿 ...

  4. IM 去中心化概念模型与架构设计

    今天打算写写关于 IM 去中心化涉及的架构模型变化和设计思路,去中心化的概念就是说用户的访问不是集中在一个数据中心,这里的去中心是针对数据中心而言的. 站在这个角度而言,实际上并非所有的业务都能做去中 ...

  5. JavaScript 函数节流和函数去抖应用场景辨析

    概述 也是好久没更新 源码解读,看着房价蹭蹭暴涨,心里也是五味杂陈,对未来充满恐惧和迷茫 ...(敢问一句你们上岸了吗) 言归正传,今天要介绍的是 underscore 中两个重要的方法,函数节流和函 ...

  6. 回车去替换铵钮的click点击功能

    某一时候,我们不想在form的所有必填的域均完成之后,再去使用mouse去点击铵钮来提交数据.而是直接按回车去focus提交的铵钮来提交. 可以写jQuery script程序:

  7. app使用微信支付成功后,点击返回到该app却跳到另外一个app去了

    刚接手了公司iOS的两个APP, 现在碰到了这样一个问题: 有一台iPhone在一个APP中使用了微信支付,支付成功后,点击返回到该APP,结果却跳到了另外一个APP去了. 这两个APP都是公司开发的 ...

  8. [LeetCode] Serialize and Deserialize BST 二叉搜索树的序列化和去序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  9. [LeetCode] Serialize and Deserialize Binary Tree 二叉树的序列化和去序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

随机推荐

  1. dedecms标签使用

    关键描述调用标签: <meta name="keywords" content="{dede:field name='keywords'/}">&l ...

  2. view添加阴影无效

    需求:需要给cell里的imageview添加阴影 问题:按照标准的代码添加阴影,然并卵:代码如下: imageview.layer.shadowColor = [[UIColor blackColo ...

  3. ajax修改密码

    <div>用户名:<input type="text" id="uid" /><span id="tt" st ...

  4. Memcached源码分析之线程模型

    作者:Calix 一)模型分析 memcached到底是如何处理我们的网络连接的? memcached通过epoll(使用libevent,下面具体再讲)实现异步的服务器,但仍然使用多线程,主要有两种 ...

  5. Android动画之translate(位移动画)(转)

    转自:http://www.cnblogs.com/bavariama/archive/2013/01/29/2881225.html 上一篇文章讲了 Android的左右滑动切换,实现过程是非常简单 ...

  6. 计时器chronometer补充

    项目中要实现关于安卓控件chronometer这部分的功能需求: 1.计时器的功能对用户答题时间进行时间统计,用户答完该题,进入下一题,计时器接续上一题的结束时间继续计时: 2.用户可以跳出答题界面, ...

  7. 笔记整理--玩转robots协议

    玩转robots协议 -- 其他 -- IT技术博客大学习 -- 共学习 共进步! - Google Chrome (2013/7/14 20:24:07) 玩转robots协议 2013年2月8日北 ...

  8. nodejs那些事

    安装篇: 1.从http://nodejs.cn/上下载了nodejs-v4.4.4版安装包(已存入360云盘) 2.在windows下双击——下一步——下一步安装即可(注意:安装路径就默认安装到C: ...

  9. Violin 琴弦介绍

    共四根弦,从粗到细: 第四弦:音名:G:唱名:Sol 第三弦:音名:D:唱名:Re 第二弦:音名:A:唱名:La 第一弦:音名:E:唱名:Mi

  10. Linux平台使用指令记录

    ssh gaea@10.101.89.156 svn checkout http://svn.alibaba-inc.com/repos/ali_china/olps/rights/branches/ ...