赞
踩
目录
可以通过使用哈希表可以对XML文件进行查询。
Hashtable通常称为哈希表,它表示键/值对的集合,这些键/值对根据键的哈希代码进行组织,它的每个元素都是一个存储于DictionaryEntry对象中的键/值对。
注意:Hashtable哈希表中的键不能为空引用,但值可以。
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 具有固定的大小。

- // 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
- */

XML是eXtensible Markup Language的缩写,它是一种类似于HTML的标记语言。XML以简易而标准的方式保存各种信息(如文字和数字等信息),适用于不同应用程序间的数据交换,而这种交换不以预先定义的一组数据结构为前提,增强了可扩展性。
- // 用哈希表查询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
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。