C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#查询XML

C#使用哈希表实现XML文件查询

作者:wenchm

这篇文章主要为大家详细介绍了C#如何使用哈希表实现XML文件查询功能,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考下

可以通过使用哈希表可以对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:  brown
        four:   fox
        two:    quick
        one:    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
    }
}

2.生成效果

到此这篇关于C#使用哈希表实现XML文件查询的文章就介绍到这了,更多相关C#查询XML内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文