C# 獲取XML文件內(nèi)容的多種方式總結(jié)
C#獲取XML文件內(nèi)容的方式
首先設(shè)定有一個(gè)xml文件Configs.xml,其內(nèi)容如下:
<?xml version="1.0" encoding="utf-8" ?> <Config> ? <Device name="aaa"> ? ? <Type name="a01" func="1"></Type> ? ? <Type name="a02"></Type> ? ? <Type name="a03"></Type> ? ? <Type name="a04"></Type> ? </Device> ? <Device name="bbb"> ? ? <Type name="b01"></Type> ? ? <Type name="b02"></Type> ? ? <Type name="b03"></Type> ? ? <Type name="b04"></Type> ? </Device> ? <Device name="ccc"> ? ? <Type name="c01"></Type> ? ? <Type name="c02"></Type> ? ? <Type name="c03"></Type> ? ? <Type name="c04" func="2"></Type> ? </Device> </Config>
一、讀取外部的XML文件方法
//獲取所有一級(jí)目錄 List<string> devices = new List<string>(); XmlDocument doc = new XmlDocument(); doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\TEMP\Configs.xml"); XmlNode xnl1 = doc.DocumentElement; foreach (XmlNode xn1 in xnl1.ChildNodes) { ? ? XmlElement xe1 = (XmlElement)xn1; ? ? devices.Add(xe1.GetAttribute("name").ToString()); } return devices;
//獲取某個(gè)一級(jí)目錄下的子目錄 ?List<string> types = new List<string>(); ?XmlDocument doc = new XmlDocument(); ?doc.Load(AppDomain.CurrentDomain.BaseDirectory + @"\TEMP\Configs.xml"); ?XmlNode xnl1 = doc.DocumentElement; ?foreach (XmlNode xn1 in xnl1) ?{ ? ? ?XmlElement xe1 = (XmlElement)xn1; ? ? ?if (xe1.GetAttribute("name").ToString() == "aaa") ? ? ?{ ? ? ? ? ?XmlNodeList xnl2 = xe1.ChildNodes; ? ? ? ? ?foreach (XmlNode xn2 in xnl2) ? ? ? ? ?{ ? ? ? ? ? ? ?XmlElement xe2 = (XmlElement)xn2; ? ? ? ? ? ? ?types.Add(xe2.GetAttribute("name").ToString()); ? ? ? ? ?} ? ? ? ? ?break; ? ? ?} ?} ?return types;
二、讀取內(nèi)部XML文件方法
文件屬性:
復(fù)制到輸出目錄:不復(fù)制
生成操作:嵌入的資源
//獲取所有一級(jí)目錄 List<string> devices = new List<string>(); ? ? ? ?? string config= System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Configs.Configs.xml"; System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream s = assembly.GetManifestResourceStream(config); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; XmlReader reader = XmlReader.Create(s, settings); XmlDocument doc = new XmlDocument(); doc.Load(reader); XmlNode xn = doc.SelectSingleNode("Config"); XmlNodeList xnl1 = xn.ChildNodes; foreach (XmlNode xn1 in xnl1) { ? ? XmlElement xe1 = (XmlElement)xn1; ? ? devices.Add(xe1.GetAttribute("name").ToString()); } reader.Close(); return devices;
//獲取某個(gè)一級(jí)目錄下的子目錄 List<string> types = new List<string>(); ? ? ? ? ?? string config= System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".Configs.Configs.xml"; System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); System.IO.Stream s = assembly.GetManifestResourceStream(config); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; XmlReader reader = XmlReader.Create(s, settings); XmlDocument doc = new XmlDocument(); doc.Load(reader); XmlNode xn = doc.SelectSingleNode("Config"); XmlNodeList xnl1 = xn.ChildNodes; foreach (XmlNode xn1 in xnl1) { ? ? XmlElement xe1 = (XmlElement)xn1; ? ? if (xe1.GetAttribute("name").ToString() == "aaa") ? ? { ? ? ? ? XmlNodeList xnl2 = xe1.ChildNodes; ? ? ? ? foreach (XmlNode xn2 in xnl2) ? ? ? ? { ? ? ? ? ? ? XmlElement xe2 = (XmlElement)xn2; ? ? ? ? ? ? types.Add(xe2.GetAttribute("name").ToString()); ? ? ? ? } ? ? ? ? break; ? ? } } reader.Close(); return types;
三、讀取類庫(kù)中XML文件的方法
文件屬性:
復(fù)制到輸出目錄:不復(fù)制
生成操作:Resource
List<Type> types = new List<Type>(); string fileName = AppDomain.CurrentDomain.BaseDirectory + "Config.dll"; System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFile(fileName); string resourceName = assembly.GetName().Name + ".g"; System.Resources.ResourceManager manager = new System.Resources.ResourceManager(resourceName, assembly); object obj = manager.GetObject("asserts/config.xml");//全部字母小寫(xiě) System.IO.Stream stream = (System.IO.Stream)obj; XmlDocument doc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true;//忽略文檔里面的注釋,因?yàn)樵跊](méi)有特別說(shuō)明的情況下,注釋也是一個(gè)節(jié)點(diǎn) XmlReader reader = XmlReader.Create(stream, settings); doc.Load(reader); XmlNode xn = doc.SelectSingleNode("Config"); XmlNodeList xnl1 = xn.ChildNodes; foreach (XmlNode xn1 in xnl1) { ? ? XmlElement xe1 = (XmlElement)xn1; ? ? Type type = new Type(); ? ? type.name = xe1.GetAttribute("name").ToString(); ? ? type.func = xe1.GetAttribute("func").ToString(); ? ? XmlNodeList xnl0 = xe1.ChildNodes; ? ? type.Content = xnl0.Item(0).InnerText.Substring(1).TrimEnd(); ? ? types.Add(type); } reader.Close(); return types;
四、讀取程序內(nèi)添加的外部可見(jiàn)的XML文件
文件屬性:
復(fù)制到輸出目錄:始終復(fù)制
生成操作:內(nèi)容
List<string> devices= new List<string>(); XmlDocument doc = new XmlDocument(); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments = true; XmlReader reader = XmlReader.Create(@"Asserts\Config.xml", settings); doc.Load(reader); XmlNode xn = doc.SelectSingleNode("Config"); XmlNodeList xnl1 = xn.ChildNodes; foreach (XmlNode xn1 in xnl1) { ? ? XmlElement xe1 = (XmlElement)xn1; ? ? devices.Add(xe1.GetAttribute("name").ToString()); } reader.Close(); return serialsList;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C# 中const,readonly,static的使用小結(jié)
這篇文章主要介紹了C# 中使用const,readonly,static的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-01-01C#程序最小化到托盤(pán)圖標(biāo)操作步驟與實(shí)現(xiàn)代碼
設(shè)置窗體屬性showinTask=false;加notifyicon控件notifyIcon1,為控件notifyIcon1的屬性Icon添加一個(gè)icon圖標(biāo);添加窗體最小化事件(首先需要添加事件引用)接下來(lái)介紹實(shí)現(xiàn)代碼,感興趣的朋友可以研究下2012-12-12Unity實(shí)現(xiàn)汽車前后輪倒車軌跡計(jì)算
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)汽車前后輪倒車軌跡計(jì)算,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09將Qt項(xiàng)目升級(jí)到Qt6吐血經(jīng)驗(yàn)總結(jié)
很多朋友向小編反饋將Qt項(xiàng)目升級(jí)到Qt6頻繁出錯(cuò),該如何處理呢,今天小編給大家?guī)?lái)了將Qt項(xiàng)目升級(jí)到Qt6吐血經(jīng)驗(yàn)總結(jié),感興趣的朋友一起看看吧2021-07-07C#安裝OpenCvSharp4的實(shí)現(xiàn)步驟
OpenCv是一款開(kāi)源的圖像處理庫(kù),本文就介紹了C#安裝OpenCvSharp4的實(shí)現(xiàn)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2022-05-05C#使用Socket實(shí)現(xiàn)心跳的方法示例
這篇文章主要介紹了C#使用Socket實(shí)現(xiàn)心跳的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02