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哈希表中。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/382048.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视觉开发板—K210自学笔记(三)

本期我们来遵循其他单片机的学习路线开始去做一位点灯大师—点亮一个LED。那么第一步还是先知道K210里面的硬件电路是怎么连接的&#xff0c;需要查看上一节的文档&#xff0c;看看开发板原理图到底是哪个LED跟哪个IO连在一起。 一、硬件电路 根据之前官方提供的assembly draw…

最简单的基于 FFmpeg 的音频编码器(PCM 编码为 AAC)

最简单的基于 FFmpeg 的音频编码器&#xff08;PCM 编码为 AAC&#xff09; 最简单的基于 FFmpeg 的音频编码器&#xff08;PCM 编码为 AAC&#xff09;正文结果工程文件下载其他参考链接 最简单的基于 FFmpeg 的音频编码器&#xff08;PCM 编码为 AAC&#xff09; 参考雷霄骅…

【小沐学GIS】基于Android绘制三维数字地球Earth(OpenGL)

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

Java:常用API接上篇 --黑马笔记

一、 StringBuilder类 StringBuilder代表可变字符串对象&#xff0c;相当于是一个容器&#xff0c;它里面的字符串是可以改变的&#xff0c;就是用来操作字符串的。 好处&#xff1a;StringBuilder比String更合适做字符串的修改操作&#xff0c;效率更高&#xff0c;代码也更…

例36:打开文件读出文件内容

1.建立一个EXE工程&#xff0c;在主窗体上放一个按钮&#xff0c;如图32。 图32 在按钮的单击事件中输入代码&#xff1a; Sub Form1_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd)Dim s as StringDim 文件 As CWSTR FF_OpenFileDialog(hWndForm,_"打开…

微信自动预约小程序开发指南:从小白到专家

在数字化时代&#xff0c;预约小程序已成为各类服务行业的必备工具。本文将指导你从零开始&#xff0c;通过第三方小程序制作平台&#xff0c;顺利开发出一款具有预约功能的实用小程序。 第一步&#xff1a;注册登录第三方小程序制作平台 首先&#xff0c;你需要选择一个适合你…

案例:三台主机实现 级联复制

介绍&#xff1a;级联复制架构 级联复制架构 是一种特殊的主从结构&#xff0c;之前聊到的几种主从结构都只有两层&#xff0c;但级联复制架构中会有三层&#xff0c;关系如下&#xff1a; 也就是在级联复制架构中&#xff0c;存在两层从库&#xff0c;这实际上属于一主多从架…

Hive-架构与设计

架构与设计 一、背景和起源二、框架概述1.设计特点 三、架构图1.UI交互层2.Driver驱动层3.Compiler4.Metastore5.Execution Engine 四、执行流程1.发起请求2.获取执行计划3.获取元数据4.返回元数据5.返回执行计划6.运行执行计划7.运行结果获取 五、数据模型1.DataBase数据库2.T…

fast.ai 机器学习笔记(四)

机器学习 1&#xff1a;第 11 课 原文&#xff1a;medium.com/hiromi_suenaga/machine-learning-1-lesson-11-7564c3c18bbb 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这些笔记将继续…

[office] Excel2019函数MAXIFS怎么使用?Excel2019函数MAXIFS使用教程 #知识分享#微信#经验分享

Excel2019函数MAXIFS怎么使用&#xff1f;Excel2019函数MAXIFS使用教程 Excel2019函数MAXIFS怎么使用&#xff1f;这篇文章主要介绍了Excel2019函数MAXIFS使用教程,需要的朋友可以参考下 在今年&#xff0c;Excel除了新版本Excel2019&#xff0c;其中有一个新功能MAXIFS函数&am…

python_django高校运动会成绩管理系统4o4c3

田径运动会报名管理系统就是给学生进行网上报名&#xff0c;管理员管理报名信息的一种通用管理平台&#xff0c;从而方便管理人员对运动会的日常报名工作的管理。本系统的前台功能模块包括系统的基本操作、最新公告、运动项目和报名项目&#xff1b;系统的后台功能模块包括系统…

opencv计算机视觉

树莓派主机的无键盘解决 进入控制面板&#xff0c;更改适配器设置&#xff0c;WIFI属性&#xff0c;勾选 1.将网线两头分别接入树莓派和笔记本的网线接口 2.在无线连接属性那里勾选允许其他用户连接 3.运行cmd使用arp -a查看树莓派ip地址&#xff0c;或者使用ipscanner查看 cmd…

Nginx实战:1-安装搭建

目录 前言 一、yum安装 二、编译安装 1.下载安装包 2.解压 3.生成makefile文件 4.编译 5.安装执行 6.执行命令软连接 7.Nginx命令 前言 nginx的安装有两种方式&#xff1a; 1、yum安装&#xff1a;安装快速&#xff0c;但是无法在安装的时候带上想要的第三方包 2、…

巧用liteflow,告别if else,SpringBoot整合liteflow

假设有一个三个原子业务&#xff0c;吃饭、喝水、刷牙。 现在有三个场景&#xff0c;分别是 场景A: 吃饭->刷牙->喝水 官网地址&#xff1a;https://liteflow.cc/ 1.添加依赖&#xff1a; <dependency><groupId>com.yomahub</groupId><artifactI…

FPGA_工程_基于rom的vga显示

一 框图 二 代码修改 module Display #(parameter H_DISP 1280,parameter V_DISP 1024,parameter H_lcd 12d150,parameter V_lcd 12d150,parameter LCD_SIZE 15d10_000 ) ( input wire clk, input wire rst_n, input wire [11:0] lcd_xpos, //lcd horizontal coo…

python+django+vue汽车票在线预订系统58ip7

本课题使用Python语言进行开发。基于web,代码层面的操作主要在PyCharm中进行&#xff0c;将系统所使用到的表以及数据存储到MySQL数据库中 使用说明 使用Navicat或者其它工具&#xff0c;在mysql中创建对应名称的数据库&#xff0c;并导入项目的sql文件&#xff1b; 使用PyChar…

【Linux】学习-基础IO拓展篇

Linux基础IO拓展篇—详解文件系统 理解文件系统 在Linux基础IO篇中&#xff0c;我们站在用户的视角对文件进行了理解&#xff0c;主要是针对被打开的文件&#xff0c;那么有没有没有被打开的文件呢&#xff1f;当然有&#xff01;今天我们换个视角&#xff0c;来站在系统的角…

XSS-Lab

1.关于20关的payload合集。 <script>alert(1)</script> "><script>alert(1)</script> onclickalert(1) " onclick"alert(1) "><a href"javascript:alert(1)"> "><a HrEf"javascript:alert…

滑块验证码识别代码分享

平时我们开发爬虫会遇到各种各样的滑动验证码&#xff0c;如下图所示&#xff1a; 为了解决这个问题&#xff0c;我写了一个通用的滑块验证码识别代码&#xff0c;主要是分析图片&#xff0c;然后计算出滑块滑动的像素距离。但是像素距离大多数情况下都不会等于滑动距离&#x…

机器学习系列——(二十一)神经网络

引言 在当今数字化时代&#xff0c;机器学习技术正日益成为各行各业的核心。而在机器学习领域中&#xff0c;神经网络是一种备受瞩目的模型&#xff0c;因其出色的性能和广泛的应用而备受关注。本文将深入介绍神经网络&#xff0c;探讨其原理、结构以及应用。 一、简介 神经网…