日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

简单XML文件C#操作方法

發(fā)布時間:2025/5/22 C# 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单XML文件C#操作方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

XML數(shù)據(jù)文件靈活而強(qiáng)大,在C#中,操作起來也十分方便.我們常用XML文件保存少量的數(shù)據(jù),如系統(tǒng)配置信息,用戶個性數(shù)據(jù)...,而對這些數(shù)據(jù)的操作最常用的就是讀取,寫入和刪除相關(guān)的結(jié)點(diǎn).本人的實(shí)際的應(yīng)用過程中,逐步形成了以下XML配置文件的操作類.下面的這個類為大家提供了一系列更加簡捷的操作方法,無需再考慮文件或結(jié)點(diǎn)是否存在.

代碼 using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.IO;
using?System.Xml;
using?System.Xml.XPath;

namespace?LuckerSoft
{
????
///?<summary>
????
///?該XML文件操作類提供一系統(tǒng)自動完成的操作類.包括常用的數(shù)據(jù)讀取,寫入與刪除.
????
///?支持非字符型數(shù)據(jù)(即所有支持序列化的object類型)的操作.
????
///?并具有文件或結(jié)點(diǎn)不存在時自動創(chuàng)建的功能.
????
///?該類采用靜態(tài)類設(shè)計(jì),用類名直接調(diào)用其公有方法,主要適用于對XML文件中單個結(jié)點(diǎn)的操作
????
///?作者:Lucker
????
///?日期:2009年12月29日
????
///?版本:1.0.0
????
///?</summary>
????public?static?class?MyXML
????{
????????
///?<summary>
????????
///?從指定的XML文件中讀取指定路徑下所有結(jié)點(diǎn)的值
????????
///?</summary>
????????
///?<param?name="XMLFile">帶路徑的XML文件名</param>
????????
///?<param?name="Path">帶路徑的結(jié)點(diǎn)名</param>
????????
///?<returns></returns>
????????public?static?string[]?ReadNodes(string?XMLFile,?string?Path)
????????{
????????????
string?Values="";????????????
????????????XmlDocument?xmldoc?
=?CheckFileExit(XMLFile);
????????????XmlNode?Node?
=?FindNode(xmldoc,?Path);
????????????
foreach?(XmlNode?node?in?Node.ChildNodes)
????????????{
????????????????Values?
+=?node.Name.ToString()?+?",";
????????????}
????????????
return?Values.Split(new?char[]?{?','?},?StringSplitOptions.RemoveEmptyEntries);
????????}
????????
????????
///?<summary>
????????
///?從指定的XML文件中讀取指定路徑下單個結(jié)點(diǎn)的值.當(dāng)結(jié)點(diǎn)不存在時,根據(jù)所提供默認(rèn)值自動創(chuàng)建.
????????
///?</summary>
????????
///?<param?name="XMLFile"></param>
????????
///?<param?name="Path"></param>
????????
///?<param?name="DefaultValue">結(jié)點(diǎn)不存在時,提供的默認(rèn)值</param>
????????
///?<returns></returns>
????????public?static?string?ReadNode(string?XMLFile,?string?Path,?string?DefaultValue)
????????{
????????????XmlDocument?xmldoc?
=?CheckFileExit(XMLFile);
????????????XmlNode?Node?
=?FindNode(xmldoc,?Path);
????????????
if?(Node?!=?null)
????????????{
????????????????
return?Node.InnerText;
????????????}
????????????
else
????????????{
????????????????WriteNode(XMLFile,?Path,?DefaultValue);
????????????????
return?DefaultValue;
????????????}
????????}

????????
///?<summary>
????????
///?讀取一個object類型的結(jié)點(diǎn)數(shù)據(jù).
????????
///?</summary>
????????
///?<param?name="XMLFile"></param>
????????
///?<param?name="Path"></param>
????????
///?<param?name="DefaultValue">object類型的數(shù)據(jù)實(shí)際上是經(jīng)過序列化后轉(zhuǎn)換成string保存在文件中的</param>
????????
///?<returns></returns>
????????public?static?object?ReadNode(string?XMLFile,?string?Path,?object?DefaultValue)
????????{
????????????
//讀出文件中的string值
????????????string?Value=ReadNode(XMLFile,?Path,?Object2String(DefaultValue));
????????????
//再將讀取出來的string數(shù)據(jù)需要轉(zhuǎn)化成object對象.
????????????object?o=?String2Object(Value);
????????????
return?o;
????????}
????????
????????
///?<summary>
????????
///?向指定的XML文件中寫入指定路徑的結(jié)點(diǎn)數(shù)據(jù).當(dāng)指定結(jié)點(diǎn)不存在是時,將沿路徑依次創(chuàng)建各父結(jié)點(diǎn)
????????
///?</summary>
????????
///?<param?name="XMLFile"></param>
????????
///?<param?name="Path"></param>
????????
///?<param?name="Value">結(jié)點(diǎn)值</param>
????????public?static?void?WriteNode(string?XMLFile,?string?Path,?string?Value)
????????{
????????????XmlDocument?myDoc?
=?CheckFileExit(XMLFile);
????????????PathNode?
=?null;
????????????PathDepth?
=?0;
????????????ParentNode?
=?null;
????????????CheckPath(myDoc,?Path);
????????????XmlNode?Node?
=?FindNode(myDoc,?Path);
????????????
if?(Node?!=?null)
????????????{
????????????????UpdateXmlNode(Value,?Node);
????????????}
????????????myDoc.Save(XMLFile);
????????}
????????
????????
///?<summary>
????????
///?寫入一個object類型的對象.
????????
///?</summary>
????????
///?<param?name="XMLFile"></param>
????????
///?<param?name="Path"></param>
????????
///?<param?name="Value"></param>
????????public?static?void?WriteNode(string?XMLFile,?string?Path,?object?Value)
????????{
????????????
//經(jīng)序列化后轉(zhuǎn)換成string型后再寫入.
????????????WriteNode(XMLFile,?Path,?Object2String(Value));
????????}

????????
///?<summary>
????????
///?刪除指定的結(jié)點(diǎn)
????????
///?</summary>
????????
///?<param?name="XMLFile"></param>
????????
///?<param?name="Path"></param>
????????
///?<returns></returns>
????????public?static?bool?DeleteNode(string?XMLFile,?string?Path)
????????{
????????????XmlDocument?myDoc?
=?CheckFileExit(XMLFile);
????????????XmlNode?Node?
=?FindNode(myDoc,?Path);
????????????
if(Node!=null)
????????????{
????????????????
if?(Node.ParentNode?!=?null)
????????????????{
????????????????????Node.ParentNode.RemoveChild(Node);
????????????????}
????????????????
else
????????????????{
????????????????????myDoc.RemoveChild(Node);
????????????????}
????????????????myDoc.Save(XMLFile);
????????????}
????????????
return?true;
????????}
????????
????????
#region?私有方法

????????
///?<summary>
????????
///?更新指定結(jié)點(diǎn)的值
????????
///?</summary>
????????
///?<param?name="TextName">結(jié)點(diǎn)的值</param>
????????
///?<param?name="XNe">要更新的結(jié)點(diǎn)</param>
????????
///?<returns></returns>
????????private?static?bool?UpdateXmlNode(string?TextName,?XmlNode?XNe)
????????{
????????????
if?(XNe?!=?null)
????????????{
????????????????XNe.InnerText?
=?TextName;
????????????????
return?true;
????????????}
????????????
else
????????????????
return?false;
????????}
????????
????????
///?<summary>
????????
///?插入一個指定的XML元素
????????
///?</summary>
????????
///?<param?name="myDoc"></param>
????????
///?<param?name="ElementName">元素名</param>
????????
///?<param?name="Text">元素值</param>
????????
///?<returns></returns>
????????private?static?XmlNode?InsertXmlElement(XmlDocument?myDoc,?string?ElementName,?string?Text)
????????{
????????????
if?(ElementName?!=?"")
????????????{
????????????????XmlElement?XEt?
=?myDoc.CreateElement("",ElementName,"");
????????????????XEt.InnerText?
=?Text;
????????????????
return?(XmlNode)XEt;
????????????}
????????????
else
????????????{
????????????????
return?null;
????????????}
????????}
????????
????????
static?string[]?PathNode?=?null;
????????
static?int?PathDepth=0;
????????
static?XmlNode?ParentNode;
????????
///?<summary>
????????
///?獲取路徑結(jié)點(diǎn)集指定深度的路徑表示
????????
///?</summary>
????????
///?<param?name="depth"></param>
????????
///?<returns></returns>
????????private?static?string?GetPath(int?depth)
????????{
????????????
string?path?=?"";
????????????
for?(int?i?=?0;?i?<?depth?&&?i?<?PathNode.Length;?i++)
????????????{
????????????????path?
+=?PathNode[i]?+?"/";
????????????}
????????????
return?path.Substring(0,path.Length?-?1);
????????}
????????
????????
///?<summary>
????????
///?遞歸檢查指定路徑上的結(jié)點(diǎn)是否存在,不存在則創(chuàng)建
????????
///?</summary>
????????
///?<param?name="myDoc"></param>
????????
///?<param?name="Path"></param>
????????private?static?void?CheckPath(XmlDocument?myDoc,?string?Path)
????????{
????????????
if?(PathNode?==?null)
????????????{
????????????????PathNode?
=?Path.Split(new?char[]?{?'/'?});
????????????????PathDepth?
=?0;
????????????}
????????????
if?(PathDepth?<?PathNode.Length)
????????????{
????????????????
string?NewPath?=?GetPath(++PathDepth);
????????????????
string?Name?=?PathNode[PathDepth-1];
????????????????XmlNode?Node?
=?FindNode(myDoc,?NewPath);
????????????????
if?(Node?==?null)
????????????????{
????????????????????XmlNode?NewNode?
=?InsertXmlElement(myDoc,?Name,?null);
????????????????????ParentNode.AppendChild(NewNode);
????????????????????ParentNode?
=?FindNode(myDoc,?NewPath);
????????????????}
????????????????
else
????????????????{
????????????????????ParentNode?
=?Node;
????????????????}
????????????????CheckPath(myDoc,?NewPath);
????????????}
????????}
????????
????????
///?<summary>
????????
///?查詢指定路徑上的第一個結(jié)點(diǎn)
????????
///?</summary>
????????
///?<param?name="myDoc"></param>
????????
///?<param?name="Path"></param>
????????
///?<returns></returns>
????????private?static?XmlNode?FindNode(XmlDocument?myDoc,?string?Path)
????????{
????????????
//Path:aaaa/bbbb/cccc
????????????XmlNode?myNode?=?myDoc.SelectSingleNode(Path);
????????????
if?(!(myNode?==?null))
????????????{
????????????????
return?myNode;
????????????}
????????????
return?null;
????????}
????????
????????
///?<summary>
????????
///?查詢指定路徑上的所有結(jié)點(diǎn)
????????
///?</summary>
????????
///?<param?name="myDoc"></param>
????????
///?<param?name="Path"></param>
????????
///?<returns></returns>
????????private?static?XmlNodeList?FindNodes(XmlDocument?myDoc,?string?Path)
????????{
????????????
//Path:aaaa/bbbb/cccc
????????????XmlNodeList?myNodeList?=?myDoc.SelectNodes(Path);
????????????
if?(!(myNodeList?==?null))
????????????{
????????????????
return?myNodeList;
????????????}
????????????
return?null;
????????}
????????
????????
///?<summary>
????????
///?查詢指定的XML文件是否存在.如果不存在,則創(chuàng)建一個具有默認(rèn)根結(jié)點(diǎn)的XML文件.
????????
///?</summary>
????????
///?<param?name="XMLFile"></param>
????????
///?<returns></returns>
????????private?static?XmlDocument?CheckFileExit(string?XMLFile)
????????{
????????????XmlDocument?xmldoc?
=?new?XmlDocument();
????????????
if?(File.Exists(XMLFile))
????????????{
????????????????
try
????????????????{
????????????????????xmldoc.Load(XMLFile);
????????????????}
????????????????
catch?(Exception?ex)
????????????????{
????????????????????
throw?new?Exception("載入XML文件["?+?XMLFile?+?"]失敗.\r\n"+ex.Message);
????????????????}
????????????}
????????????
else
????????????{
????????????????XmlDeclaration?xn?
=?xmldoc.CreateXmlDeclaration("1.0",?"gb2312",?null);
????????????????xmldoc.AppendChild(xn);
????????????????XmlElement?xmlelem?
=?xmldoc.CreateElement("",?"打印項(xiàng)目模板",?"");
????????????????xmldoc.AppendChild(xmlelem);
????????????????xmldoc.Save(XMLFile);
????????????}
????????????
return?xmldoc;
????????}

????????
///???<summary>
????????
///???序列化為二進(jìn)制字節(jié)數(shù)組
????????
///???</summary>
????????
///???<param???name="request">要序列化的對象</param>
????????
///???<returns>字節(jié)數(shù)組</returns>
????????private?static?byte[]?SerializeBinary(object?request)
????????{
????????????System.Runtime.Serialization.Formatters.Binary.BinaryFormatter?serializer?
=?new?System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
????????????System.IO.MemoryStream?memStream?
=?new?System.IO.MemoryStream();
????????????serializer.Serialize(memStream,?request);
????????????
return?memStream.GetBuffer();
????????}

????????
///???<summary>
????????
///???從二進(jìn)制數(shù)組反序列化得到對象
????????
///???</summary>
????????
///???<param???name="buf">字節(jié)數(shù)組</param>
????????
///???<returns>得到的對象</returns>
????????private?static?object?DeserializeBinary(byte[]?buf)
????????{
????????????System.IO.MemoryStream?memStream?
=?new?MemoryStream(buf);
????????????memStream.Position?
=?0;
????????????System.Runtime.Serialization.Formatters.Binary.BinaryFormatter?deserializer?
=
????????????????
new?System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
????????????
object?newobj?=?deserializer.Deserialize(memStream);
????????????memStream.Close();
????????????
return?newobj;
????????}
????????
????????
private?static?string?Object2String(object?Obj)
????????{
????????????StringBuilder?sb?
=?new?StringBuilder();
????????????
byte[]?ByteObject?=?SerializeBinary(Obj);
????????????
foreach?(byte?b?in?ByteObject)
????????????{
????????????????sb.Append(((
int)b).ToString());
????????????????sb.Append(
",");
????????????}
????????????
return?sb.Remove(sb.Length-1,1).ToString();
????????}
????????
????????
private?static?object?String2Object(string?Value)
????????{
????????????
string[]?V?=?Value.Split(new?char[]?{?','?},StringSplitOptions.RemoveEmptyEntries);
????????????
byte[]?ByteObject?=?new?byte[V.Length];
????????????
for(int?i=0;i<ByteObject.Length;i++)
????????????{
????????????????ByteObject[i]?
=?Convert.ToByte(V[i]);
????????????}
????????????
return?DeserializeBinary(ByteObject);
????????}
????????
????????
#endregion
????}
}

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/luckeryin/archive/2009/12/29/1635203.html

總結(jié)

以上是生活随笔為你收集整理的简单XML文件C#操作方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。