当前位置:   article > 正文

C#使用哈希表对XML文件进行查询_c# xml文件hash

c# xml文件hash

目录

一、使用的方法 

1.Hashtable哈希表

2.Hashtable哈希表的Add方法

(1)定义

(2)示例

3.XML文件的使用 

二、实例

1.源码

2.生成效果


        可以通过使用哈希表可以对XML文件进行查询。

一、使用的方法 

1.Hashtable哈希表

        Hashtable通常称为哈希表,它表示键/值对的集合,这些键/值对根据键的哈希代码进行组织,它的每个元素都是一个存储于DictionaryEntry对象中的键/值对。

        注意:Hashtable哈希表中的键不能为空引用,但值可以。

2.Hashtable哈希表的Add方法

(1)定义

        Hashtable哈希表的Add方法用来将带有指定键和值的元素添加到Hashtable哈希表中。

  1. public virtual void Add (object key, object? value);
  2. 参数
  3. key Object
  4. 要添加的元素的键。
  5. value Object
  6. 要添加的元素的值。 该值可以为 null
  7. 实现
  8. Add(Object, Object)
  9. 例外
  10. ArgumentNullException
  11. key 为 null
  12. ArgumentException
  13. Hashtable 中已存在具有相同键的元素。
  14. NotSupportedException
  15. Hashtable 为只读。
  16. - 或 -
  17. Hashtable 具有固定的大小。

(2)示例

  1. // Hashtable.Add(Object, Object) 方法
  2. using System.Collections;
  3. namespace _107_1
  4. {
  5. public class SamplesHashtable
  6. {
  7. public static void Main()
  8. {
  9. // Creates and initializes a new Hashtable.
  10. var myhash = new Hashtable//集合方法
  11. {
  12. { "one", "The" },
  13. { "two", "quick" },
  14. { "three", "brown" },
  15. { "four", "fox" }
  16. };
  17. //等效语句,Add方法
  18. //var myhash = new Hashtable();
  19. //myhash.Add("one", "The");
  20. //myhash.Add("two", "quick");
  21. //myhash.Add("three", "brown");
  22. //myhash.Add("four", "fox");
  23. // Displays the Hashtable.
  24. Console.WriteLine("The Hashtable contains the following:");
  25. PrintKeysAndValues(myhash);
  26. }
  27. public static void PrintKeysAndValues(Hashtable myhash)
  28. {
  29. Console.WriteLine("\t-KEY-\t-VALUE-");
  30. foreach (DictionaryEntry de in myhash)
  31. Console.WriteLine($"\t{de.Key}:\t{de.Value}");
  32. }
  33. }
  34. }
  35. /*
  36. 运行效果:
  37. The Hashtable contains the following:
  38. -KEY- -VALUE-
  39. three: brown
  40. four: fox
  41. two: quick
  42. one: The
  43. */

3.XML文件的使用 

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

二、实例

1.源码

  1. // 用哈希表查询XML文件
  2. using System.Collections;
  3. using System.Xml;
  4. namespace _107
  5. {
  6. public partial class Form1 : Form
  7. {
  8. private Label? label1;
  9. private Label? label2;
  10. static ComboBox? comboBox1;
  11. static ComboBox? comboBox2;
  12. public Form1()
  13. {
  14. InitializeComponent();
  15. StartPosition = FormStartPosition.CenterScreen;
  16. Load += Form1_Load;
  17. }
  18. private void Form1_Load(object? sender, EventArgs e)
  19. {
  20. //
  21. // label1
  22. //
  23. label1 = new Label
  24. {
  25. AutoSize = true,
  26. Location = new Point(12, 21),
  27. Name = "label1",
  28. Size = new Size(68, 17),
  29. TabIndex = 0,
  30. Text = "电台名称:"
  31. };
  32. //
  33. // label2
  34. //
  35. label2 = new Label
  36. {
  37. AutoSize = true,
  38. Location = new Point(12, 52),
  39. Name = "label2",
  40. Size = new Size(68, 17),
  41. TabIndex = 1,
  42. Text = "电台网址:"
  43. };
  44. //
  45. // comboBox1
  46. //
  47. comboBox1 = new ComboBox
  48. {
  49. FormattingEnabled = true,
  50. Location = new Point(77, 13),
  51. Name = "comboBox1",
  52. Size = new Size(195, 25),
  53. TabIndex = 2
  54. };
  55. //
  56. // comboBox2
  57. //
  58. comboBox2 = new ComboBox
  59. {
  60. FormattingEnabled = true,
  61. Location = new Point(77, 44),
  62. Name = "comboBox2",
  63. Size = new Size(195, 25),
  64. TabIndex = 3
  65. };
  66. //
  67. // Form1
  68. //
  69. AutoScaleDimensions = new SizeF(7F, 17F);
  70. AutoScaleMode = AutoScaleMode.Font;
  71. ClientSize = new Size(284, 81);
  72. Controls.Add(comboBox2);
  73. Controls.Add(comboBox1);
  74. Controls.Add(label2);
  75. Controls.Add(label1);
  76. Name = "Form1";
  77. Text = "用哈希表查询XML文件";
  78. Myhash();
  79. }
  80. static void Myhash()
  81. {
  82. Hashtable myHashtable = SelectXML("BroadCastInfo.xml"); //使用自定义方法实例化哈希表对象
  83. IDictionaryEnumerator IDEnumerator = myHashtable.GetEnumerator();
  84. while (IDEnumerator.MoveNext()) //循环访问哈希表
  85. {
  86. comboBox1!.Items.Add(IDEnumerator.Value!.ToString()!); //显示电台名称
  87. comboBox2!.Items.Add(IDEnumerator.Key.ToString()!); //显示电台网址
  88. }
  89. comboBox1!.SelectedIndex = comboBox2!.SelectedIndex = 0; //设置默认选项
  90. }
  91. #region 在XML文件中查找电台地址及名称
  92. /// <summary>
  93. /// 在XML文件中查找电台地址及名称,BCastInfo文件存储于启动目录
  94. /// </summary>
  95. /// <param name="strPath">XML文件路径</param>
  96. /// <returns>Hashtable对象,用来记录找到的电台地址及名称</returns>
  97. static Hashtable SelectXML(string strPath)
  98. {
  99. Hashtable HTable = []; //实例化哈希表对象
  100. XmlDocument doc = new();//实例化XML文档对象
  101. doc.Load(strPath); //加载XML文档
  102. XmlNodeList xnl = doc.SelectSingleNode("BCastInfo")!.ChildNodes;//获取NewDataSet节点的所有子节点
  103. string strVersion = ""; //定义一个字符串,用来记录电台地址
  104. string strInfo = ""; //定义一个字符串,用来记录电台名称
  105. foreach (XmlNode xn in xnl) //遍历所有子节点
  106. {
  107. XmlElement xe = (XmlElement)xn;//将子节点类型转换为XmlElement类型
  108. if (xe.Name == "DInfo") //判断节点名为DInfo
  109. {
  110. XmlNodeList xnlChild = xe.ChildNodes; //继续获取xe子节点的所有子节点
  111. foreach (XmlNode xnChild in xnlChild) //遍历
  112. {
  113. XmlElement xeChild = (XmlElement)xnChild;//转换类型
  114. if (xeChild.Name == "Address")
  115. {
  116. strVersion = xeChild.InnerText; //记录电台地址
  117. }
  118. if (xeChild.Name == "Name")
  119. {
  120. strInfo = xeChild.InnerText; //记录电台名称
  121. }
  122. }
  123. HTable.Add(strVersion, strInfo); //向哈希表中添加键值
  124. }
  125. }
  126. return HTable;
  127. }
  128. #endregion
  129. }
  130. }

2.生成效果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/820634
推荐阅读
相关标签
  

闽ICP备14008679号