目录
一、使用的方法
1.Hashtable哈希表
2.Hashtable哈希表的Add方法
(1)定义
(2)示例
3.XML文件的使用
二、实例
1.源码
2.生成效果
可以通过使用哈希表可以对XML文件进行查询。
一、使用的方法
1.Hashtable哈希表
Hashtable通常称为哈希表,它表示键/值对的集合,这些键/值对根据键的哈希代码进行组织,它的每个元素都是一个存储于DictionaryEntry对象中的键/值对。
注意:Hashtable哈希表中的键不能为空引用,但值可以。
2.Hashtable哈希表的Add方法
(1)定义
Hashtable哈希表的Add方法用来将带有指定键和值的元素添加到Hashtable哈希表中。
public virtual void Add (object key, object? value);参数
key Object
要添加的元素的键。value Object
要添加的元素的值。 该值可以为 null。实现
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: brownfour: foxtwo: quickone: The*/
3.XML文件的使用
XML是eXtensible Markup Language的缩写,它是一种类似于HTML的标记语言。XML以简易而标准的方式保存各种信息(如文字和数字等信息),适用于不同应用程序间的数据交换,而这种交换不以预先定义的一组数据结构为前提,增强了可扩展性。
二、实例
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 = "电台网址:"};// // 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()) //循环访问哈希表{comboBox1!.Items.Add(IDEnumerator.Value!.ToString()!); //显示电台名称comboBox2!.Items.Add(IDEnumerator.Key.ToString()!); //显示电台网址}comboBox1!.SelectedIndex = comboBox2!.SelectedIndex = 0; //设置默认选项}#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节点的所有子节点string strVersion = ""; //定义一个字符串,用来记录电台地址string strInfo = ""; //定义一个字符串,用来记录电台名称foreach (XmlNode xn in xnl) //遍历所有子节点{XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型if (xe.Name == "DInfo") //判断节点名为DInfo{XmlNodeList xnlChild = xe.ChildNodes; //继续获取xe子节点的所有子节点foreach (XmlNode xnChild in xnlChild) //遍历{XmlElement xeChild = (XmlElement)xnChild;//转换类型if (xeChild.Name == "Address"){strVersion = xeChild.InnerText; //记录电台地址}if (xeChild.Name == "Name"){strInfo = xeChild.InnerText; //记录电台名称}}HTable.Add(strVersion, strInfo); //向哈希表中添加键值}}return HTable;}#endregion}
}