亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

c#操作xml幫助類分享(xml增刪改查)

2020-01-24 02:56:40
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

using System;
using System.Collections;
using System.Xml;

namespace Jb51.Com.XmlDAL
{
public class XmlHelper
{
#region 公共變量
XmlDocument xmldoc;
XmlNode xmlnode;
XmlElement xmlelem;
#endregion

#region 創建Xml文檔
/// <summary>
/// 創建一個帶有根節點的Xml文件
/// </summary>
/// <param name="FileName">Xml文件名稱</param>
/// <param name="rootName">根節點名稱</param>
/// <param name="Encode">編碼方式:gb2312,UTF-8等常見的</param>
/// <param name="DirPath">保存的目錄路徑</param>
/// <returns></returns>
public bool CreateXmlDocument(string FileName, string RootName, string Encode)
{
try
{
xmldoc = new XmlDocument();
XmlDeclaration xmldecl;
xmldecl = xmldoc.CreateXmlDeclaration("1.0", Encode,null);
xmldoc.AppendChild(xmldecl);
xmlelem = xmldoc.CreateElement("", RootName, "");
xmldoc.AppendChild(xmlelem);
xmldoc.Save(FileName);
return true;
}
catch (Exception e)
{
return false;
throw new Exception(e.Message);
}
}

#endregion

#region 常用操作方法(增刪改)
/// <summary>
/// 插入一個節點和它的若干子節點
/// </summary>
/// <param name="XmlFile">Xml文件路徑</param>
/// <param name="NewNodeName">插入的節點名稱</param>
/// <param name="HasAttributes">此節點是否具有屬性,True為有,False為無</param>
/// <param name="fatherNode">此插入節點的父節點,要匹配的XPath表達式(例如:"http://節點名//子節點名)</param>
/// <param name="htAtt">此節點的屬性,Key為屬性名,Value為屬性值</param>
/// <param name="htSubNode">子節點的屬性,Key為Name,Value為InnerText</param>
/// <returns>返回真為更新成功,否則失敗</returns>
public bool InsertNode(string XmlFile, string NewNodeName, bool HasAttributes, string fatherNode, Hashtable htAtt, Hashtable htSubNode)
{
try
{
xmldoc = new XmlDocument();
xmldoc.Load(XmlFile);
XmlNode root = xmldoc.SelectSingleNode(fatherNode);
xmlelem = xmldoc.CreateElement(NewNodeName);
if (htAtt != null && HasAttributes)//若此節點有屬性,則先添加屬性
{
SetAttributes(xmlelem, htAtt);
SetNodes(xmlelem.Name, xmldoc, xmlelem, htSubNode);//添加完此節點屬性后,再添加它的子節點和它們的InnerText
}
else
{
SetNodes(xmlelem.Name, xmldoc, xmlelem, htSubNode);//若此節點無屬性,那么直接添加它的子節點
}

root.AppendChild(xmlelem);
xmldoc.Save(XmlFile);

return true;
}
catch (Exception e)
{

throw new Exception(e.Message);

}
}
/// <summary>
/// 更新節點
/// </summary>
/// <param name="XmlFile">Xml文件路徑</param>
/// <param name="fatherNode">需要更新節點的上級節點,要匹配的XPath表達式(例如:"http://節點名//子節點名)</param>
/// <param name="htAtt">需要更新的屬性表,Key代表需要更新的屬性,Value代表更新后的值</param>
/// <param name="htSubNode">需要更新的子節點的屬性表,Key代表需要更新的子節點名字Name,Value代表更新后的值InnerText</param>
/// <returns>返回真為更新成功,否則失敗</returns>
public bool UpdateNode(string XmlFile, string fatherNode, Hashtable htAtt, Hashtable htSubNode)
{
try
{
xmldoc = new XmlDocument();
xmldoc.Load(XmlFile);
XmlNodeList root = xmldoc.SelectSingleNode(fatherNode).ChildNodes;
UpdateNodes(root, htAtt, htSubNode);
xmldoc.Save(XmlFile);
return true;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
}

/// <summary>
/// 刪除指定節點下的子節點
/// </summary>
/// <param name="XmlFile">Xml文件路徑</param>
/// <param name="fatherNode">制定節點,要匹配的XPath表達式(例如:"http://節點名//子節點名)</param>
/// <returns>返回真為更新成功,否則失敗</returns>
public bool DeleteNodes(string XmlFile, string fatherNode)
{
try
{
xmldoc = new XmlDocument();
xmldoc.Load(XmlFile);
xmlnode = xmldoc.SelectSingleNode(fatherNode);
xmlnode.RemoveAll();
xmldoc.Save(XmlFile);
return true;
}
catch (XmlException xe)
{
throw new XmlException(xe.Message);
}
}

/// <summary>
/// 刪除匹配XPath表達式的第一個節點(節點中的子元素同時會被刪除)
/// </summary>
/// <param name="xmlFileName">XML文檔完全文件名(包含物理路徑)</param>
/// <param name="xpath">要匹配的XPath表達式(例如:"http://節點名//子節點名</param>
/// <returns>成功返回true,失敗返回false</returns>
public bool DeleteXmlNodeByXPath(string xmlFileName, string xpath)
{
bool isSuccess = false;
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加載XML文檔
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
if (xmlNode != null)
{
//刪除節點
xmldoc.ParentNode.RemoveChild(xmlNode);
}
xmldoc.Save(xmlFileName); //保存到XML文檔
isSuccess = true;
}
catch (Exception ex)
{
throw ex; //這里可以定義你自己的異常處理
}
return isSuccess;
}

/// <summary>
/// 刪除匹配XPath表達式的第一個節點中的匹配參數xmlAttributeName的屬性
/// </summary>
/// <param name="xmlFileName">XML文檔完全文件名(包含物理路徑)</param>
/// <param name="xpath">要匹配的XPath表達式(例如:"http://節點名//子節點名</param>
/// <param name="xmlAttributeName">要刪除的xmlAttributeName的屬性名稱</param>
/// <returns>成功返回true,失敗返回false</returns>
public bool DeleteXmlAttributeByXPath(string xmlFileName, string xpath, string xmlAttributeName)
{
bool isSuccess = false;
bool isExistsAttribute = false;
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加載XML文檔
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
XmlAttribute xmlAttribute = null;
if (xmlNode != null)
{
//遍歷xpath節點中的所有屬性
foreach (XmlAttribute attribute in xmlNode.Attributes)
{
if (attribute.Name.ToLower() == xmlAttributeName.ToLower())
{
//節點中存在此屬性
xmlAttribute = attribute;
isExistsAttribute = true;
break;
}
}
if (isExistsAttribute)
{
//刪除節點中的屬性
xmlNode.Attributes.Remove(xmlAttribute);
}
}
xmldoc.Save(xmlFileName); //保存到XML文檔
isSuccess = true;
}
catch (Exception ex)
{
throw ex; //這里可以定義你自己的異常處理
}
return isSuccess;
}

/*柯樂義*/
/// <summary>
/// 刪除匹配XPath表達式的第一個節點中的所有屬性
/// </summary>
/// <param name="xmlFileName">XML文檔完全文件名(包含物理路徑)</param>
/// <param name="xpath">要匹配的XPath表達式(例如:"http://節點名//子節點名</param>
/// <returns>成功返回true,失敗返回false</returns>
public bool DeleteAllXmlAttributeByXPath(string xmlFileName, string xpath)
{
bool isSuccess = false;
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加載XML文檔
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
if (xmlNode != null)
{
//遍歷xpath節點中的所有屬性
xmlNode.Attributes.RemoveAll();
}
xmldoc.Save(xmlFileName); //保存到XML文檔
isSuccess = true;
}
catch (Exception ex)
{
throw ex; //這里可以定義你自己的異常處理
}
return isSuccess;
}
#endregion

#region 私有方法
/// <summary>
/// 設置節點屬性
/// </summary>
/// <param name="xe">節點所處的Element</param>
/// <param name="htAttribute">節點屬性,Key代表屬性名稱,Value代表屬性值</param>
private void SetAttributes(XmlElement xe, Hashtable htAttribute)
{
foreach (DictionaryEntry de in htAttribute)
{
xe.SetAttribute(de.Key.ToString(), de.Value.ToString());
}
}
/// <summary>
/// 增加子節點到根節點下
/// </summary>
/// <param name="rootNode">上級節點名稱</param>
/// <param name="XmlDoc">Xml文檔</param>
/// <param name="rootXe">父根節點所屬的Element</param>
/// <param name="SubNodes">子節點屬性,Key為Name值,Value為InnerText值</param>
private void SetNodes(string rootNode, XmlDocument XmlDoc, XmlElement rootXe, Hashtable SubNodes)
{
if (SubNodes == null)
return;
foreach (DictionaryEntry de in SubNodes)
{
xmlnode = XmlDoc.SelectSingleNode(rootNode);
XmlElement subNode = XmlDoc.CreateElement(de.Key.ToString());
subNode.InnerText = de.Value.ToString();
rootXe.AppendChild(subNode);
}
}
/// <summary>
/// 更新節點屬性和子節點InnerText值。柯 樂 義
/// </summary>
/// <param name="root">根節點名字</param>
/// <param name="htAtt">需要更改的屬性名稱和值</param>
/// <param name="htSubNode">需要更改InnerText的子節點名字和值</param>
private void UpdateNodes(XmlNodeList root, Hashtable htAtt, Hashtable htSubNode)
{
foreach (XmlNode xn in root)
{
xmlelem = (XmlElement)xn;
if (xmlelem.HasAttributes)//如果節點如屬性,則先更改它的屬性
{
foreach (DictionaryEntry de in htAtt)//遍歷屬性哈希表
{
if (xmlelem.HasAttribute(de.Key.ToString()))//如果節點有需要更改的屬性
{
xmlelem.SetAttribute(de.Key.ToString(), de.Value.ToString());//則把哈希表中相應的值Value賦給此屬性Key
}
}
}
if (xmlelem.HasChildNodes)//如果有子節點,則修改其子節點的InnerText
{
XmlNodeList xnl = xmlelem.ChildNodes;
foreach (XmlNode xn1 in xnl)
{
XmlElement xe = (XmlElement)xn1;
foreach (DictionaryEntry de in htSubNode)
{
if (xe.Name == de.Key.ToString())//htSubNode中的key存儲了需要更改的節點名稱,
{
xe.InnerText = de.Value.ToString();//htSubNode中的Value存儲了Key節點更新后的數據
}
}
}
}

}
}
#endregion
#region XML文檔節點查詢和讀取
/// <summary>
/// 選擇匹配XPath表達式的第一個節點XmlNode.
/// </summary>
/// <param name="xmlFileName">XML文檔完全文件名(包含物理路徑)</param>
/// <param name="xpath">要匹配的XPath表達式(例如:"http://節點名//子節點名")</param>
/// <returns>返回XmlNode</returns>
public XmlNode GetXmlNodeByXpath(string xmlFileName, string xpath)
{
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加載XML文檔
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
return xmlNode;
}
catch (Exception ex)
{
return null;
//throw ex; //這里可以定義你自己的異常處理
}
}

/// <summary>
/// 選擇匹配XPath表達式的節點列表XmlNodeList.
/// </summary>
/// <param name="xmlFileName">XML文檔完全文件名(包含物理路徑)</param>
/// <param name="xpath">要匹配的XPath表達式(例如:"http://節點名//子節點名")</param>
/// <returns>返回XmlNodeList</returns>
public XmlNodeList GetXmlNodeListByXpath(string xmlFileName, string xpath)
{
xmldoc = new XmlDocument();
try
{
xmldoc.Load(xmlFileName); //加載XML文檔
XmlNodeList xmlNodeList = xmldoc.SelectNodes(xpath);
return xmlNodeList;
}
catch (Exception ex)
{
return null;
//throw ex; //這里可以定義你自己的異常處理
}
}

/// <summary>
/// 選擇匹配XPath表達式的第一個節點的匹配xmlAttributeName的屬性XmlAttribute. 柯樂義
/// </summary>
/// <param name="xmlFileName">XML文檔完全文件名(包含物理路徑)</param>
/// <param name="xpath">要匹配的XPath表達式(例如:"http://節點名//子節點名</param>
/// <param name="xmlAttributeName">要匹配xmlAttributeName的屬性名稱</param>
/// <returns>返回xmlAttributeName</returns>
public XmlAttribute GetXmlAttribute(string xmlFileName, string xpath, string xmlAttributeName)
{
string content = string.Empty;
xmldoc = new XmlDocument();
XmlAttribute xmlAttribute = null;
try
{
xmldoc.Load(xmlFileName); //加載XML文檔
XmlNode xmlNode = xmldoc.SelectSingleNode(xpath);
if (xmlNode != null)
{
if (xmlNode.Attributes.Count > 0)
{
xmlAttribute = xmlNode.Attributes[xmlAttributeName];
}
}
}
catch (Exception ex)
{
throw ex; //這里可以定義你自己的異常處理
}
return xmlAttribute;
}
#endregion
}
}

這個類怎么使用呢?下面給出一個創建xml文檔的例子:

復制代碼 代碼如下:

XmlHelper m_menu_keleyi_com = new XmlHelper();
m_menu_keleyi_com.CreateXmlDocument(@"D:/kel"+"eyimenu.xml", "ke"+"leyimenu", "utf-8");

這短代碼在D盤創建了一個名為keleyimenu.xml的文檔,文檔有根節點keleyimenu,文檔的內容為:

復制代碼 代碼如下:

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

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区久久久久久| 亚洲视频在线免费看| 日韩亚洲国产中文字幕| 亚洲欧美中文另类| 亚洲黄色片网站| 国产视频在线观看一区二区| 不卡伊人av在线播放| 亚洲影影院av| 久久久久久久久综合| 欧美成人精品xxx| 国产精品久久久久久久av大片| 日韩欧美国产视频| 日本在线精品视频| 欧美日韩国产精品一区二区不卡中文| 精品久久久香蕉免费精品视频| 97在线精品国自产拍中文| 国产午夜精品一区二区三区| 国产精品女人网站| 欧美极品少妇xxxxⅹ喷水| 久久在精品线影院精品国产| 成人精品一区二区三区电影黑人| 日韩av免费在线| 色综合视频一区中文字幕| 国产成+人+综合+亚洲欧美丁香花| 日韩大陆毛片av| 亚洲国产日韩一区| 国产精品一区二区性色av| 久久夜色精品国产欧美乱| 精品亚洲国产视频| 综合136福利视频在线| 91精品国产高清自在线看超| 亚洲人成在线免费观看| 日韩欧美亚洲国产一区| 欧美亚洲午夜视频在线观看| 亚洲丁香婷深爱综合| 亚洲欧美日韩精品久久亚洲区| 人人爽久久涩噜噜噜网站| 久久精品夜夜夜夜夜久久| 91香蕉亚洲精品| 亚洲视频一区二区三区| 国产精品日日做人人爱| 成人春色激情网| 欧美一级视频免费在线观看| 亚洲欧美国产精品专区久久| 欧美一级电影久久| 51精品国产黑色丝袜高跟鞋| 国产精品欧美日韩一区二区| 亚洲激情自拍图| 成人国产精品av| 7777免费精品视频| 亚洲xxxx在线| 美女av一区二区| 亚洲欧美日韩直播| 欧美自拍视频在线观看| 久久人91精品久久久久久不卡| 亚洲欧美成人一区二区在线电影| 日韩精品在线观看视频| 色伦专区97中文字幕| 91久久精品国产91久久| 色偷偷偷亚洲综合网另类| 国产日韩精品在线观看| 久久久国产精品亚洲一区| 久久久久久久久91| 亚洲第一二三四五区| 91精品一区二区| 一本色道久久88综合日韩精品| 国产精品老女人视频| 欧美在线一区二区三区四| 精品欧美aⅴ在线网站| 亚洲香蕉成视频在线观看| 色哟哟网站入口亚洲精品| 欧美精品精品精品精品免费| 激情久久av一区av二区av三区| 国产精品 欧美在线| 91免费人成网站在线观看18| 亚洲国产精品女人久久久| 日本精品视频在线| 日韩精品极品视频免费观看| 国产成人精品在线播放| 国产精彩精品视频| 92国产精品久久久久首页| 91理论片午午论夜理片久久| 欧美又大又硬又粗bbbbb| 久久91亚洲精品中文字幕| 亚洲欧洲第一视频| 自拍偷拍亚洲欧美| 热久久视久久精品18亚洲精品| 久久免费国产视频| 欧洲一区二区视频| 久久国产精品久久久久| 欧美亚洲在线观看| 伊人成人开心激情综合网| 日韩在线精品视频| 亚洲国产成人av在线| 91经典在线视频| 欧美亚州一区二区三区| 91性高湖久久久久久久久_久久99| 亚洲性猛交xxxxwww| 性亚洲最疯狂xxxx高清| 欧美视频裸体精品| 亚洲小视频在线| 欧美激情一二三| 97人人爽人人喊人人模波多| 少妇激情综合网| 国产中文字幕日韩| 91精品国产色综合久久不卡98| 丝袜一区二区三区| 亚洲免费中文字幕| 亚洲伊人成综合成人网| 亚洲人成网在线播放| 欧美有码在线观看视频| 亚洲一区二区久久久久久| 成人国产精品久久久久久亚洲| 精品久久久一区二区| 亚洲天堂网在线观看| 欧美做爰性生交视频| 91亚洲永久免费精品| 久久久国产在线视频| 日韩欧美国产视频| 欧美成人免费小视频| 欧美精品一本久久男人的天堂| 亚洲欧美在线免费| 久久久久国产视频| 精品综合久久久久久97| 亚洲白虎美女被爆操| 欧美性videos高清精品| 91精品国产自产在线观看永久| 欧美猛交ⅹxxx乱大交视频| 在线成人中文字幕| 欧美一级在线播放| 欧美激情国内偷拍| 91久久久久久久久久久| 欧美成人剧情片在线观看| 精品国产91乱高清在线观看| 精品国偷自产在线| 91久久久精品| 亚洲欧美日韩国产成人| 国产精品久久久久久久久免费| 性日韩欧美在线视频| 国内精品久久久久久| 亚洲视频免费一区| 精品国产91久久久| 成人有码视频在线播放| 亚洲精品美女在线| 久久精品国产96久久久香蕉| 中文字幕视频一区二区在线有码| 最近2019中文字幕mv免费看| 色偷偷偷综合中文字幕;dd| 欧美视频第一页| 久久全国免费视频| 日韩电影中文字幕av| 91久久在线播放| 日韩在线免费观看视频| 亚洲欧洲美洲在线综合| 尤物九九久久国产精品的分类| 国产v综合v亚洲欧美久久| 久久免费高清视频| 欧美激情极品视频| 97超级碰碰碰久久久| 日韩在线播放一区| 第一福利永久视频精品| 日韩欧美精品在线观看| 欧美成aaa人片免费看| 成人亲热视频网站|