仿Jquery链式操作的xml操作类

经常需要对xml文件进行操作,参考了Jquery的链式操作后实现了xmlHelper类。

ExpandedBlockStart.gif代码
using System;
using System.Data;
using System.Configuration;
using System.Xml;
namespace ConfigUpdate
{
    
/// <summary>
    
/// 调用非静态的操作方法的
    
/// </summary>
    public class XmlHelper
    {
        
private XmlDocument _doc;
        
private string _xmlPath;
        
public XmlHelper(string xmlPath)
        {
            _xmlPath 
= xmlPath;
            _doc 
= new XmlDocument();
            _doc.Load(xmlPath);
        }

        
/// <summary>
        
/// 读取数据
        
/// </summary>
        
/// <param name="xmlPath">路径</param>
        
/// <param name="node">节点</param>
        
/// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
        
/// <returns>string</returns>
        public static string Select(string xmlPath, string node, string attribute)
        {
            XmlDocument doc 
= new XmlDocument();
            doc.Load(xmlPath);
            XmlNode xn 
= GetNode(doc, node);
            
string value = (String.IsNullOrEmpty(attribute) ? xn.InnerText : xn.Attributes[attribute].Value);
            doc.Clone();
            
return value;
        }

        
/// <summary>
        
/// 调用此方法后不再需要调用Execute方法。
        
/// </summary>
        
/// <param name="node"></param>
        
/// <param name="attribute"></param>
        
/// <returns></returns>
        public string Select(string node, string attribute)
        {
            
string value = String.Empty; ;
            XmlNode xn 
= GetNode(_doc, node);
            value 
= (String.IsNullOrEmpty(attribute) ? xn.InnerText : xn.Attributes[attribute].Value);
            
return value;
        }

        
/// <summary>
        
/// 插入数据
        
/// </summary>
        
/// <param name="xmlPath">路径</param>
        
/// <param name="node">节点</param>
        
/// <param name="element">元素名,非空时插入新元素,否则在该元素中插入属性</param>
        
/// <param name="attribute">属性名,非空时插入该元素属性值,否则插入元素值</param>
        
/// <param name="value"></param>
        
/// <returns></returns>
        public XmlHelper Insert(string node, string element, string attribute, string value)
        {
            Add(_doc, _xmlPath, node, element, attribute, value);
            
return this;
        }

        
public static void Insert(string xmlPath, string node, string element, string attribute, string value)
        {
            XmlDocument doc 
= new XmlDocument();
            doc.Load(xmlPath);
            Add(doc, xmlPath, node, element, attribute, value);
        }

        
private static void Add(XmlDocument doc, string xmlPath, string node, string element, string attribute, string value)
        {
            XmlNode xn 
= GetNode(doc, node);
            
if (String.IsNullOrEmpty(element))
            {
                
if (!String.IsNullOrEmpty(attribute))
                {
                    XmlElement xe 
= (XmlElement)xn;
                    xe.SetAttribute(attribute, value);
                }
            }
            
else
            {
                XmlElement xe 
= doc.CreateElement(element);
                
if (String.IsNullOrEmpty(attribute))
                    xe.InnerText 
= value;
                
else
                    xe.SetAttribute(attribute, value);
                xn.AppendChild(xe);
            }
            doc.Save(xmlPath);
        }

        
/// <summary>
        
/// 修改数据
        
/// </summary>
        
/// <param name="xmlPath">路径</param>
        
/// <param name="node">节点</param>
        
/// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
        
/// <param name="value"></param>
        
/// <returns></returns>
        public static void Update(string xmlPath, string node, string attribute, string value)
        {
            XmlDocument doc 
= new XmlDocument();
            doc.Load(xmlPath);
            Edit(doc, xmlPath, node, attribute, value);
        }

        
/// <summary>
        
/// 插入一个节点或者属性
        
/// </summary>
        
/// <param name="node"></param>
        
/// <param name="attribute"></param>
        
/// <param name="value"></param>
        
/// <returns></returns>
        public XmlHelper Update(string node, string attribute, string value)
        {
            Edit(_doc, _xmlPath, node, attribute, value);
            
return this;
        }

        
private static void Edit(XmlDocument doc, string xmlPath, string node, string attribute, string value)
        {
            XmlNode xn 
= GetNode(doc, node);
            XmlElement xe 
= (XmlElement)xn;
            
if (String.IsNullOrEmpty(attribute))
            {
                xe.InnerText 
= value;
            }
            
else
            {
                xe.SetAttribute(attribute, value);
            }
            doc.Save(xmlPath);
        }
       
        
/// <summary>
        
/// 删除数据
        
/// </summary>
        
/// <param name="xmlPath">路径</param>
        
/// <param name="node">节点如果是非根节点可使用多层节点表达式:nodelayer1>nodelayer2>nodelayer3</param>
        
/// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
        
/// <param name="value"></param>
        
/// <returns></returns>
        public static void Remove(string xmlPath, string node, string attribute)
        {
            XmlDocument doc 
= new XmlDocument();
            doc.Load(xmlPath);
            Delete(doc, xmlPath, node, attribute);
        }

        
public XmlHelper Delete(string node, string attribute)
        {
            Delete(_doc, _xmlPath, node, attribute);
            
return this;
        }

        
private static void Delete(XmlDocument doc, string xmlPath, string node, string attribute)
        {
            XmlNode xn 
= GetNode(doc, node);
            XmlElement xe 
= (XmlElement)xn;
            
if (String.IsNullOrEmpty(attribute))
            {
                xn.ParentNode.RemoveChild(xn);
            }
            
else
            {
                xe.RemoveAttribute(attribute);
            }
            doc.Save(xmlPath);
        }
        
/// <summary>
        
/// 返回节点
        
/// </summary>
        
/// <param name="doc"></param>
        
/// <param name="node">节点表达式</param>
        
/// <returns></returns>
        private static XmlNode GetNode(XmlDocument doc, string node)
        {
            
if (String.IsNullOrEmpty(node))
            {
                
throw new ArgumentNullException("节点不能为空");
            }
            
string[] nodelayers = node.Split('>');
            XmlNode xn 
= doc.SelectSingleNode(nodelayers[0]);
            
for (int i = 1; i < nodelayers.Length; i++)
            {
                
if (String.IsNullOrEmpty(nodelayers[i]))
                {
                    
throw new ArgumentException(String.Format("第{0}级节点为空",i+1));
                }
                
else
                {
                    xn 
= xn.SelectSingleNode(nodelayers[i]);
                }
            }
            
return xn;
        }
    }
}

 

 使用示例:

ExpandedBlockStart.gif代码
string _configPath = "config.xml";
           XmlHelper.Insert(_configPath, 
"configuration","mynode",null,"kk");
 
           
string msg= new XmlHelper(_configPath)
               .Insert(
"configuration""mynode"null"kk")
               .Update(
"configuration>mynode"null"zhao")
               .Select(
"configuration>mynode"null);
           MessageBox.Show(msg);
   

 

 xml内容

 <?xml version="1.0" encoding="utf-8"?>

<configuration>
</configuration>

 

转载于:https://www.cnblogs.com/luckuny/archive/2011/02/22/1961255.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4月17日鸿蒙开发者大会,4月17日这天,将载入华为史册

文/笨鸟原创不易&#xff0c;禁止抄袭、洗稿&#xff0c;违者必究&#xff01;万众瞩目的华为鸿蒙系统对于国人来说&#xff0c;一部智能手机只有实现了芯片和系统技术的自主化&#xff0c;才能被称之为真正的国产手机。而就目前的国内手机市场而言&#xff0c;除华为之外的所有…

html仿手机界面,javascript新手实例3-仿手机聊天界面(if else运用)

今天给大家一个if else的Javascript小示例&#xff0c;其中我在js文件里写了很多注释&#xff0c;有兴趣的同学自己看注释&#xff0c;另外对于聊天界面的显示方式&#xff0c;我写了两种&#xff0c;大家也可以分别试试&#xff1a;老规矩&#xff0c;先上图&#xff1a;html代…

LeetCode 1457. 二叉树中的伪回文路径(位运算+递归)

1. 题目 给你一棵二叉树&#xff0c;每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的&#xff0c;当它满足&#xff1a;路径经过的所有节点值的排列中&#xff0c;存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 示例 1&…

LeetCode 837. 新21点(动态规划)

文章目录1. 题目2. 解题2.1 暴力超时2.2 优化1. 题目 爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏&#xff0c;描述如下&#xff1a; 爱丽丝以 0 分开始&#xff0c;并在她的得分少于 K 分时抽取数字。 抽取时&#xff0c;她从 [1, W] 的范围中随机获得一个整数作为…

计算机网络划分的标准,计算机网络基础

1.具有统一的网络体系结构、遵循国际标准化协议的计算机网络在第三代网络出现以前各厂家为了霸占市场采用自己独特的技术并开发了自己的网络体系结构网络无法实现不同厂家设备互连这样就阻碍了大范围网络的发展。后来为了实现网络大范围的发展和不同厂家设备的互连1977年国际标…

大型软件是否占用计算机内存,电脑系统开机内存占用多少正常

原标题&#xff1a;电脑系统开机内存占用多少正常正常情况下有多少启动内存&#xff1f;如果使用2G内存&#xff0c;则Win7在启动时基本上可以达到50&#xff05;以上&#xff0c;运行点程序肯定会达到80&#xff05;&#xff0c;这是正常的。如果使用4G内存&#xff0c;则Win7…

LeetCode 1267. 统计参与通信的服务器(计数)

1. 题目 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff0c;我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一…

Informix IDS 11系统料理(918查验)认证指南,第 4 部分: 功能调优(5)

更新统计信息的调优IDS 使用基于本钱的优化器&#xff1a;当优化器确定盘诘规画时&#xff0c;它为每个可以的规画付与一个本钱&#xff0c;然后选择本钱最低的规画。下面是优化器用于确定每个盘诘规画的本钱的一些要素&#xff1a;与每个文件系统会见相干的 I/O 请求的数目 确…

Yakuake 2.8 beta1

Toy Posted in AppsRSSTrackback Yakuake 这个终端模拟器我们已经批评过&#xff0c;它可以将一些异常不错的下场融入到你的终端体验中。本日&#xff0c;该办法推出了 2.8 beta1 版&#xff0c;新增了皮肤经管、全屏情势、以及可将会话别离到多个终端窗口等功用。- Download Y…

怎样用计算机添加文章标题,计算机论文题目怎么定-易指做帮写网

1.相关理论基础分析1.1宠物救助系统理论阐述在很多区域&#xff0c;猫和狗等小动物均处于一种散养的状态&#xff0c;这样一来就使其成为流浪动物&#xff0c;无家可归&#xff0c;在城市的街道上游走。此外&#xff0c;由于流浪猫狗的繁衍速度较快&#xff0c;壮大流浪动物的群…

LeetCode 390. 消除游戏(类似约瑟夫环,找映射规律)

1. 题目 给定一个从1 到 n 排序的整数列表。 首先&#xff0c;从左到右&#xff0c;从第一个数字开始&#xff0c;每隔一个数字进行删除&#xff0c;直到列表的末尾。 第二步&#xff0c;在剩下的数字中&#xff0c;从右到左&#xff0c;从倒数第一个数字开始&#xff0c;每隔…

四川大学计算机学院挑战杯,“挑战杯”四川大学2018-2019年大学生课外学术科技作品竞赛决赛答辩举行...

3月22日下午&#xff0c;“挑战杯”四川大学2018-2019年大学生课外学术科技作品竞赛决赛答辩在望江基础教学楼A座顺利举行。从校赛报名阶段的263支队伍中脱颖而出的108支团队进行了现场PPT陈述和评委问辨。参赛项目包括科技发明类、自然科学论文类、社会哲学调查报告类作品。评…

LeetCode 519. 随机翻转矩阵(哈希)

1. 题目 题中给出一个 n_rows 行 n_cols 列的二维矩阵&#xff0c;且所有值被初始化为 0。 要求编写一个 flip 函数&#xff0c;均匀随机的将矩阵中的 0 变为 1&#xff0c;并返回该值的位置下标 [row_id,col_id]&#xff1b; 同样编写一个 reset 函数&#xff0c;将所有的值都…

迪士尼手机官方专卖东家京破产

迪士尼手机业务一向都在不时的展开&#xff0c;迪士尼品牌各种周边主题手机掉掉了MM们的喜好。上个月脱手脱手&#xff0c;迪士尼在日本推出了特别版的Android智好手机&#xff0c;并举办了大面积的电视告白推行&#xff0c;昨天迪士尼挪动在东京市中心开放了他们的官方实体专…

通过 .NET Framework 中的 XPath 和 XSLT API 方便地操作 XML 数据

本文假设您熟悉 Visual Basic .NET 下载本文的代码&#xff1a; XPathandXSLT.exe (166KB) 摘要 XPath 是一种正在兴起的通用查询语言。通过 XPath&#xff0c;可以在基于 XML 的数据源中识别和处理一组相关的节点。XPath 提供了一个基础结构&#xff0c;它是 .NET Framewo…

测试网络机顶盒的软件,2018网络机顶盒装机必备的几款系统工具,亲测好用

很多用户都喜欢比较网络机顶盒的配置&#xff0c;可是配置固然重要&#xff0c;如果没有好的日常保护&#xff0c;网络机顶盒受损程度也会很大。高配置的网络机顶盒在长时间使用后&#xff0c;也会出现卡顿&#xff0c;运行变慢等问题。今天给大家介绍几款系统工具&#xff0c;…

测试一体机风扇分贝软件,9款小风扇深度横评,风力、噪音测试加拆解,告诉你谁最值得买...

炎热的夏天又又又来了&#xff01;虽然现在家里、办公室都有空调&#xff0c;但是当我们刚从暴热的室外进入室内时&#xff0c;空调还是很难让我们快速拥有舒爽温度&#xff0c;很多人都会选择一个台式小风扇作为辅助降温产品。但市面上的风扇品牌繁多&#xff0c;怎么才能选择…

计算机摄像头打不开,电脑摄像头打不开、用不了怎么办(操作简单),这几步你要了解...

有时候我们会遇到在开视频时电脑无法打开摄像头&#xff0c;这有可能是摄像头本身就有问题&#xff0c;也有可能是因为权限设置美没有到位&#xff0c;导致摄像头不能打开。今天咱们来解决一下&#xff0c;电脑摄像头无法打开的问题。工具/材料鲁大师或者360驱动大师等可以修改…

fiddler怎么修改服务器返回数据,基于Fiddler实现修改接口返回数据进行测试

方法介绍与比对在测试的过程中&#xff0c;有的需求是这样的&#xff0c;它需要你修改接口返回的数据&#xff0c;从而检查在客户端手机app内是否显示正确&#xff0c;这也算是一种接口容错测试&#xff0c;接口容错测试属于app性能(专项)测试的其中一种。通过Fiddler我们可以有…

LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS2.3 并查集1. 题目 给定一组 N 人&#xff08;编号为 1, 2, …, N&#xff09;&#xff0c; 我们想把每个人分进任意大小的两组。 每个人都可能不喜欢其他人&#xff0c;那么他们不应该属于同一组。 形式上&#xff0c;如果 dislikes[i…