C#使用哈希表實(shí)現(xiàn)XML文件查詢
可以通過(guò)使用哈希表可以對(duì)XML文件進(jìn)行查詢。
一、使用的方法
1.Hashtable哈希表
Hashtable通常稱為哈希表,它表示鍵/值對(duì)的集合,這些鍵/值對(duì)根據(jù)鍵的哈希代碼進(jìn)行組織,它的每個(gè)元素都是一個(gè)存儲(chǔ)于DictionaryEntry對(duì)象中的鍵/值對(duì)。
注意:Hashtable哈希表中的鍵不能為空引用,但值可以。
2.Hashtable哈希表的Add方法
(1)定義
Hashtable哈希表的Add方法用來(lái)將帶有指定鍵和值的元素添加到Hashtable哈希表中。
public virtual void Add (object key, object? value);
參數(shù)
key Object 要添加的元素的鍵。
value Object 要添加的元素的值。 該值可以為 null。
實(shí)現(xiàn)
Add(Object, Object)
例如
ArgumentNullException
key 為 null。
ArgumentException
Hashtable 中已存在具有相同鍵的元素。
NotSupportedException
Hashtable 為只讀。
- 或 -
Hashtable 具有固定的大小。
(2)示例
// Hashtable.Add(Object, Object) 方法 using System.Collections; namespace _107_1 { public class SamplesHashtable { public static void Main() { // Creates and initializes a new Hashtable. var myhash = new Hashtable//集合方法 { { "one", "The" }, { "two", "quick" }, { "three", "brown" }, { "four", "fox" } }; //等效語(yǔ)句,Add方法 //var myhash = new Hashtable(); //myhash.Add("one", "The"); //myhash.Add("two", "quick"); //myhash.Add("three", "brown"); //myhash.Add("four", "fox"); // Displays the Hashtable. Console.WriteLine("The Hashtable contains the following:"); PrintKeysAndValues(myhash); } public static void PrintKeysAndValues(Hashtable myhash) { Console.WriteLine("\t-KEY-\t-VALUE-"); foreach (DictionaryEntry de in myhash) Console.WriteLine($"\t{de.Key}:\t{de.Value}"); } } } /* 運(yùn)行效果: The Hashtable contains the following: -KEY- -VALUE- three: brown four: fox two: quick one: The */
3.XML文件的使用
XML是eXtensible Markup Language的縮寫,它是一種類似于HTML的標(biāo)記語(yǔ)言。XML以簡(jiǎn)易而標(biāo)準(zhǔn)的方式保存各種信息(如文字和數(shù)字等信息),適用于不同應(yīng)用程序間的數(shù)據(jù)交換,而這種交換不以預(yù)先定義的一組數(shù)據(jù)結(jié)構(gòu)為前提,增強(qiáng)了可擴(kuò)展性。
二、實(shí)例
1.源碼
// 用哈希表查詢XML文件 using System.Collections; using System.Xml; namespace _107 { public partial class Form1 : Form { private Label? label1; private Label? label2; static ComboBox? comboBox1; static ComboBox? comboBox2; public Form1() { InitializeComponent(); StartPosition = FormStartPosition.CenterScreen; Load += Form1_Load; } private void Form1_Load(object? sender, EventArgs e) { // // label1 // label1 = new Label { AutoSize = true, Location = new Point(12, 21), Name = "label1", Size = new Size(68, 17), TabIndex = 0, Text = "電臺(tái)名稱:" }; // // label2 // label2 = new Label { AutoSize = true, Location = new Point(12, 52), Name = "label2", Size = new Size(68, 17), TabIndex = 1, Text = "電臺(tái)網(wǎng)址:" }; // // comboBox1 // comboBox1 = new ComboBox { FormattingEnabled = true, Location = new Point(77, 13), Name = "comboBox1", Size = new Size(195, 25), TabIndex = 2 }; // // comboBox2 // comboBox2 = new ComboBox { FormattingEnabled = true, Location = new Point(77, 44), Name = "comboBox2", Size = new Size(195, 25), TabIndex = 3 }; // // Form1 // AutoScaleDimensions = new SizeF(7F, 17F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(284, 81); Controls.Add(comboBox2); Controls.Add(comboBox1); Controls.Add(label2); Controls.Add(label1); Name = "Form1"; Text = "用哈希表查詢XML文件"; Myhash(); } static void Myhash() { Hashtable myHashtable = SelectXML("BroadCastInfo.xml"); //使用自定義方法實(shí)例化哈希表對(duì)象 IDictionaryEnumerator IDEnumerator = myHashtable.GetEnumerator(); while (IDEnumerator.MoveNext()) //循環(huán)訪問(wèn)哈希表 { comboBox1!.Items.Add(IDEnumerator.Value!.ToString()!); //顯示電臺(tái)名稱 comboBox2!.Items.Add(IDEnumerator.Key.ToString()!); //顯示電臺(tái)網(wǎng)址 } comboBox1!.SelectedIndex = comboBox2!.SelectedIndex = 0; //設(shè)置默認(rèn)選項(xiàng) } #region 在XML文件中查找電臺(tái)地址及名稱 /// <summary> /// 在XML文件中查找電臺(tái)地址及名稱,BCastInfo文件存儲(chǔ)于啟動(dòng)目錄 /// </summary> /// <param name="strPath">XML文件路徑</param> /// <returns>Hashtable對(duì)象,用來(lái)記錄找到的電臺(tái)地址及名稱</returns> static Hashtable SelectXML(string strPath) { Hashtable HTable = []; //實(shí)例化哈希表對(duì)象 XmlDocument doc = new();//實(shí)例化XML文檔對(duì)象 doc.Load(strPath); //加載XML文檔 XmlNodeList xnl = doc.SelectSingleNode("BCastInfo")!.ChildNodes;//獲取NewDataSet節(jié)點(diǎn)的所有子節(jié)點(diǎn) string strVersion = ""; //定義一個(gè)字符串,用來(lái)記錄電臺(tái)地址 string strInfo = ""; //定義一個(gè)字符串,用來(lái)記錄電臺(tái)名稱 foreach (XmlNode xn in xnl) //遍歷所有子節(jié)點(diǎn) { XmlElement xe = (XmlElement)xn;//將子節(jié)點(diǎn)類型轉(zhuǎn)換為XmlElement類型 if (xe.Name == "DInfo") //判斷節(jié)點(diǎn)名為DInfo { XmlNodeList xnlChild = xe.ChildNodes; //繼續(xù)獲取xe子節(jié)點(diǎn)的所有子節(jié)點(diǎn) foreach (XmlNode xnChild in xnlChild) //遍歷 { XmlElement xeChild = (XmlElement)xnChild;//轉(zhuǎn)換類型 if (xeChild.Name == "Address") { strVersion = xeChild.InnerText; //記錄電臺(tái)地址 } if (xeChild.Name == "Name") { strInfo = xeChild.InnerText; //記錄電臺(tái)名稱 } } HTable.Add(strVersion, strInfo); //向哈希表中添加鍵值 } } return HTable; } #endregion } }
2.生成效果
到此這篇關(guān)于C#使用哈希表實(shí)現(xiàn)XML文件查詢的文章就介紹到這了,更多相關(guān)C#查詢XML內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)變量交換、斐波那契數(shù)列、質(zhì)數(shù)、回文方法合集
這篇文章介紹了C#實(shí)現(xiàn)變量交換、斐波那契數(shù)列、質(zhì)數(shù)、回文的方法合集,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Unity實(shí)現(xiàn)物體弧線運(yùn)動(dòng)到規(guī)定的坐標(biāo)
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體以弧線的形式運(yùn)動(dòng)到規(guī)定的坐標(biāo),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06C#保存listbox中數(shù)據(jù)到文本文件的方法
這篇文章主要介紹了C#保存listbox中數(shù)據(jù)到文本文件的方法,涉及C#操作listbox數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下2015-04-04C# 并行和多線程編程——認(rèn)識(shí)和使用Task
這篇文章主要介紹了C# 并行和多線程編程——認(rèn)識(shí)和使用Task的的相關(guān)資料,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下2021-02-02winform樹形菜單無(wú)限級(jí)分類實(shí)例
本文介紹了“winform樹形菜單無(wú)限級(jí)分類實(shí)例”,需要的朋友可以參考一下2013-03-03C#逐行分元素讀取記事本數(shù)據(jù)并寫入數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了C#逐行分元素讀取記事本數(shù)據(jù)并寫入數(shù)據(jù)庫(kù)的方法,通過(guò)StreamReader類里的ReadLine()方法實(shí)現(xiàn)逐行讀取的功能,是非常實(shí)用的技巧,需要的朋友可以參考下2014-12-12C#根據(jù)反射和特性實(shí)現(xiàn)ORM映射實(shí)例分析
這篇文章主要介紹了C#根據(jù)反射和特性實(shí)現(xiàn)ORM映射的方法,實(shí)例分析了反射的原理、特性與ORM的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04