仿Jquery链式操作的xml操作类
生活随笔
收集整理的這篇文章主要介紹了
仿Jquery链式操作的xml操作类
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
經(jīng)常需要對xml文件進行操作,參考了Jquery的鏈式操作后實現(xiàn)了xmlHelper類。
代碼using?System;using?System.Data;
using?System.Configuration;
using?System.Xml;
namespace?ConfigUpdate
{
????///?<summary>
????///?調(diào)用非靜態(tài)的操作方法的
????///?</summary>
????public?class?XmlHelper
????{
????????private?XmlDocument?_doc;
????????private?string?_xmlPath;
????????public?XmlHelper(string?xmlPath)
????????{
????????????_xmlPath?=?xmlPath;
????????????_doc?=?new?XmlDocument();
????????????_doc.Load(xmlPath);
????????}
????????///?<summary>
????????///?讀取數(shù)據(jù)
????????///?</summary>
????????///?<param?name="xmlPath">路徑</param>
????????///?<param?name="node">節(jié)點</param>
????????///?<param?name="attribute">屬性名,非空時返回該屬性值,否則返回串聯(lián)值</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>
????????///?調(diào)用此方法后不再需要調(diào)用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>
????????///?插入數(shù)據(jù)
????????///?</summary>
????????///?<param?name="xmlPath">路徑</param>
????????///?<param?name="node">節(jié)點</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>
????????///?修改數(shù)據(jù)
????????///?</summary>
????????///?<param?name="xmlPath">路徑</param>
????????///?<param?name="node">節(jié)點</param>
????????///?<param?name="attribute">屬性名,非空時修改該節(jié)點屬性值,否則修改節(jié)點值</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>
????????///?插入一個節(jié)點或者屬性
????????///?</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>
????????///?刪除數(shù)據(jù)
????????///?</summary>
????????///?<param?name="xmlPath">路徑</param>
????????///?<param?name="node">節(jié)點如果是非根節(jié)點可使用多層節(jié)點表達式:nodelayer1>nodelayer2>nodelayer3</param>
????????///?<param?name="attribute">屬性名,非空時刪除該節(jié)點屬性值,否則刪除節(jié)點值</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>
????????///?返回節(jié)點
????????///?</summary>
????????///?<param?name="doc"></param>
????????///?<param?name="node">節(jié)點表達式</param>
????????///?<returns></returns>
????????private?static?XmlNode?GetNode(XmlDocument?doc,?string?node)
????????{
????????????if?(String.IsNullOrEmpty(node))
????????????{
????????????????throw?new?ArgumentNullException("節(jié)點不能為空");
????????????}
????????????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}級節(jié)點為空",i+1));
????????????????}
????????????????else
????????????????{
????????????????????xn?=?xn.SelectSingleNode(nodelayers[i]);
????????????????}
????????????}
????????????return?xn;
????????}
????}
}
?
?使用示例:
代碼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內(nèi)容
?<?xml?version="1.0"?encoding="utf-8"?>
<configuration></configuration>
?
轉(zhuǎn)載于:https://www.cnblogs.com/luckuny/archive/2011/02/22/1961255.html
總結(jié)
以上是生活随笔為你收集整理的仿Jquery链式操作的xml操作类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UISwitch的使用
- 下一篇: 《商务与经济统计》练习:案例8-1:杂志