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

目录

一、使用的方法

1.Hashtable哈希表

2.Hashtable哈希表的Add方法

(1)定义

(2)示例

3.XML文件的使用

二、实例

1.源码

2.生成效果


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

一、使用的方法

1.Hashtable哈希表

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

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

2.Hashtable哈希表的Add方法

(1)定义

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

cs 复制代码
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)示例

cs 复制代码
// 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以简易而标准的方式保存各种信息(如文字和数字等信息),适用于不同应用程序间的数据交换,而这种交换不以预先定义的一组数据结构为前提,增强了可扩展性。

二、实例

1.源码

cs 复制代码
// 用哈希表查询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
    }
}

2.生成效果

相关推荐
GoodStudyAndDayDayUp39 分钟前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
见欢.2 小时前
XXE靶场
xml
云和数据.ChenGuang15 小时前
《XML》教案 第1章 学习XML基础
xml·java·学习
王·小白攻城狮·不是那么帅的哥·天文15 小时前
Java操作Xml
xml·java
xiao_fwuu1 天前
IDEA 打开 maven 的 settings.xml 文件
xml·maven·intellij-idea
星月前端2 天前
随记:springboot的xml中sql数据库表名动态写法
xml·数据库·spring boot
有点困的拿铁3 天前
Spring篇--xml方式整合第三方框架
xml·java·spring
武子康3 天前
Java-30 深入浅出 Spring - IoC 基础 启动IoC 纯XML启动 Bean、DI注入
xml·java·开发语言·后端·spring·mybatis·springboot
武子康3 天前
Java-29 深入浅出 Spring - IoC 基础 启动IoC容器的方式 Java方式与Web(XML、配置)方式
xml·java·大数据·开发语言·spring boot·spring
网络安全-杰克5 天前
Apache solr XML 实体注入漏洞
xml·apache·solr