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.生成效果

相关推荐
武子康8 小时前
Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码
xml·java·大数据·开发语言·后端·spring
Ll13045252982 天前
基于 COM 的 XML 解析技术(MSXML) 的总结
xml
在代码的海洋中寻找亚特兰蒂斯2 天前
AJAX对于XML和JSON的处理
xml·ajax·json
BinField4 天前
ToolsSet之:XML工具
xml·windows·microsoft
SEO-狼术4 天前
Connect Directly to Oracle XML Data
xml·数据库·oracle
YSoup4 天前
2025年目前最新版本Android Studio自定义xml预览的屏幕分辨率
android·xml·android studio
abcnull6 天前
mybatis的mapper对应的xml写法
xml·sql·spring·mybatis·mapper
Blue桃之夭夭6 天前
HTML、XML、JSON 是什么?有什么区别?又是做什么的?
xml·html·json
小于村6 天前
pom.xml 文件中配置你项目中的外部 jar 包打包方式
xml·java·jar
扶风呀6 天前
pom.xml中标签详解_
xml