C#使用哈希表實現(xiàn)XML文件查詢
可以通過使用哈希表可以對XML文件進行查詢。
一、使用的方法
1.Hashtable哈希表
Hashtable通常稱為哈希表,它表示鍵/值對的集合,這些鍵/值對根據(jù)鍵的哈希代碼進行組織,它的每個元素都是一個存儲于DictionaryEntry對象中的鍵/值對。
注意:Hashtable哈希表中的鍵不能為空引用,但值可以。
2.Hashtable哈希表的Add方法
(1)定義
Hashtable哈希表的Add方法用來將帶有指定鍵和值的元素添加到Hashtable哈希表中。
public virtual void Add (object key, object? value);
參數(shù)
key Object 要添加的元素的鍵。
value Object 要添加的元素的值。 該值可以為 null。
實現(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" }
};
//等效語句,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}");
}
}
}
/*
運行效果:
The Hashtable contains the following:
-KEY- -VALUE-
three: brown
four: fox
two: quick
one: The
*/3.XML文件的使用
XML是eXtensible Markup Language的縮寫,它是一種類似于HTML的標記語言。XML以簡易而標準的方式保存各種信息(如文字和數(shù)字等信息),適用于不同應用程序間的數(shù)據(jù)交換,而這種交換不以預先定義的一組數(shù)據(jù)結(jié)構(gòu)為前提,增強了可擴展性。
二、實例
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 = "電臺名稱:"
};
//
// label2
//
label2 = new Label
{
AutoSize = true,
Location = new Point(12, 52),
Name = "label2",
Size = new Size(68, 17),
TabIndex = 1,
Text = "電臺網(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"); //使用自定義方法實例化哈希表對象
IDictionaryEnumerator IDEnumerator = myHashtable.GetEnumerator();
while (IDEnumerator.MoveNext()) //循環(huán)訪問哈希表
{
comboBox1!.Items.Add(IDEnumerator.Value!.ToString()!); //顯示電臺名稱
comboBox2!.Items.Add(IDEnumerator.Key.ToString()!); //顯示電臺網(wǎng)址
}
comboBox1!.SelectedIndex = comboBox2!.SelectedIndex = 0; //設(shè)置默認選項
}
#region 在XML文件中查找電臺地址及名稱
/// <summary>
/// 在XML文件中查找電臺地址及名稱,BCastInfo文件存儲于啟動目錄
/// </summary>
/// <param name="strPath">XML文件路徑</param>
/// <returns>Hashtable對象,用來記錄找到的電臺地址及名稱</returns>
static Hashtable SelectXML(string strPath)
{
Hashtable HTable = []; //實例化哈希表對象
XmlDocument doc = new();//實例化XML文檔對象
doc.Load(strPath); //加載XML文檔
XmlNodeList xnl = doc.SelectSingleNode("BCastInfo")!.ChildNodes;//獲取NewDataSet節(jié)點的所有子節(jié)點
string strVersion = ""; //定義一個字符串,用來記錄電臺地址
string strInfo = ""; //定義一個字符串,用來記錄電臺名稱
foreach (XmlNode xn in xnl) //遍歷所有子節(jié)點
{
XmlElement xe = (XmlElement)xn;//將子節(jié)點類型轉(zhuǎn)換為XmlElement類型
if (xe.Name == "DInfo") //判斷節(jié)點名為DInfo
{
XmlNodeList xnlChild = xe.ChildNodes; //繼續(xù)獲取xe子節(jié)點的所有子節(jié)點
foreach (XmlNode xnChild in xnlChild) //遍歷
{
XmlElement xeChild = (XmlElement)xnChild;//轉(zhuǎn)換類型
if (xeChild.Name == "Address")
{
strVersion = xeChild.InnerText; //記錄電臺地址
}
if (xeChild.Name == "Name")
{
strInfo = xeChild.InnerText; //記錄電臺名稱
}
}
HTable.Add(strVersion, strInfo); //向哈希表中添加鍵值
}
}
return HTable;
}
#endregion
}
}2.生成效果

到此這篇關(guān)于C#使用哈希表實現(xiàn)XML文件查詢的文章就介紹到這了,更多相關(guān)C#查詢XML內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# DataTable中Compute方法用法集錦(數(shù)值/字符串/運算符/表等操作)
這篇文章主要介紹了C# DataTable中Compute方法用法,總結(jié)分析了DataTable中Compute方法常見的數(shù)值運算操作、字符串操作、運算符操作、表運算等相關(guān)技巧,需要的朋友可以參考下2016-06-06
一種c#深拷貝方式完勝java深拷貝(實現(xiàn)上的對比分析)
下面小編就為大家?guī)硪黄环Nc#深拷貝方式完勝java深拷貝(實現(xiàn)上的對比分析)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-07

