C# 通过字符串找对应名称的变量、Winform跨容器调用变量、递归遍历XML

news2024/9/20 16:58:31

C# 通过字符串找对应名称的变量、Winform跨容器调用变量、递归遍历XML

通过字符串,找对应名称的变量

ExceptionRecord er = new ExceptionRecord();//新建类的对象(变量在这个类中)
var fieldInfo = er.GetType().GetField("Params");//对应变量名的字符串
Dictionary<string, Dictionary<string, string>> tempDic = fieldInfo.GetValue(er) as Dictionary<string, Dictionary<string, string>>;

Winform跨容器调用变量

  • 将designer中的private改为public
  • 假设有A Form 和 B Panel, B想调用A中的变量。
    • 首先在B 中创建A的对象 public A a,但是不实例化
    • 然后去A 控件中的构造方法中实例化a对象
      • public B b = new B()
      • b.a = this
  • 注意,实例化要在调用之前才可以。

递归遍历XML节点

思路:根据父节点_子节点或者祖父节点_父节点_子节点(因为节点下有名称向同的节点,便于区分,所以采用这种查找方式)名称去xml下逐个查找,如果是的话就访问这个节点,否则就继续找,

public void loadNode(XmlNode visitNode, Dictionary<string, Dictionary<string, string>> needs, List<XmlNode> record, XmlDocument xmlDoc)
        {
            //访问XML中的节点,如果是需要显示的节点,就显示到UI界面
            if ((visitNode.ParentNode != null && needs.Keys.Contains(visitNode.ParentNode.Name + "_" + visitNode.Name))|| (visitNode.ParentNode.ParentNode != null && needs.Keys.Contains(visitNode.ParentNode.ParentNode.Name + "_"+visitNode.ParentNode.Name + "_" + visitNode.Name)))
            {
                foreach (XmlAttribute atb in visitNode.Attributes)
                {
                    //Console.WriteLine("属性值" + atb.Name);
                    DataRow dr = dt.NewRow();
                    dr[0] = atb.Name;
                    Dictionary<string, string> tempDic;                    
                    if (needs.Keys.Contains(visitNode.ParentNode.Name + "_" + visitNode.Name))
                    {
                        tempDic = needs[visitNode.ParentNode.Name + "_" + visitNode.Name];
                    }
                    else
                    {
                        tempDic = needs[visitNode.ParentNode.ParentNode.Name + "_" + visitNode.ParentNode.Name + "_" + visitNode.Name];
                    }
                    try
                    {
                        string[] tempParam = new string[3];
                        tempParam[0] = dr[0].ToString();
                        //Console.WriteLine(tempDic.Keys.Count);
                        if (tempDic.Keys.Contains(atb.Name))
                        {
                            dr[1] = tempDic[atb.Name];
                            tempParam[1] = dr[0].ToString();
                        }
                        else
                        {
                            dr[1] = " ";
                            tempParam[1] = dr[0].ToString();
                        }
                        dr[2] = atb.Value;
                        tempParam[2] = dr[2].ToString();
                        dt.Rows.Add(dr);
                        exceptionRecords.Add(tempParam);
                    }
                    catch
                    {

                    }
                    
                }
            }
        }
        public void recursionVisit(XmlDocument xmlDoc, XmlElement Node, Dictionary<string, Dictionary<string, string>> needs, List<XmlNode> record)
        {
            //递归访问节点
            foreach (XmlElement visitNode in Node.ChildNodes)
            {
                loadNode(visitNode, needs, record, xmlDoc);
                //Console.WriteLine("正在访问"+ visitNode.ToString());
                recursionVisit(xmlDoc, visitNode, needs, record);
            }
        }
        public void getXmlAttributesPlus(Dictionary<string, Dictionary<string, string>> needs, Dictionary<string, string> xmlPaths)
        {
            //遍历节点,直到走到最深,如果最深层不是所需要的节点就删除,否则就访问完删除然后回退一个
            exceptionRecords = new List<string[]>();         
            foreach (KeyValuePair<string, string> xmlPath in xmlPaths)
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(xmlPath.Key);
                XmlNodeList nodes = xmlDoc.SelectNodes(xmlPath.Value);
                foreach (XmlElement node in nodes)
                {
                    XmlElement visitNode = node;
                    List<XmlNode> record = new List<XmlNode>();//记录当前文件下已被访问的结点
                    recursionVisit(xmlDoc, visitNode, needs, record);
                }
            }
        }

C# 与内存相关的编译运行

图片来自网络

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Google软件工程之道》软件工程随想

写在之前&#xff1a;今年年初给自己安排了任务&#xff0c;每个月写一遍感悟性的文章。促使自己沉淀并思考。 这篇文章的内容本来只是一些想法&#xff0c; 想想还是记下来。几年以后自己再读这篇文章也许是另一种体会吧 编程和软件工程之间有三个关键的区别&#xff1a;时间、…

基于遗传算法的自主式水下潜器路径规划问题(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

2022/11/18拓展班上机课

Vs的使用 新建项目 新建源文件 关闭scanf_s和printf_s检查&#xff1a;project -> 属性 -> C/C -> 常规 ->SDL&#xff1a;否 char* str"..."出现”"const char *" 类型的值不能用于初始化 "char *" 类型的实体“错误&#xff…

2022.11.17补题祭

前言&#xff1a; 考完期中考试了&#xff01;&#xff01;生物逆袭了&#xff01;&#xff01;全年级前十&#xff08;可能是因为题目太简单我比较细心吧&#xff09;但还是错了一些不该错的题目......&#xff08;生物惨痛87分&#xff09; 感觉这次期中考试情况良好&#…

荧光标记PEG衍生物——Fluorescein-PEG-Azide,FITC-PEG-N3,荧光素peg叠氮

荧光标记PEG衍生物——Fluorescein-PEG-Azide&#xff0c;FITC-PEG-N3&#xff0c;中文名为荧光素-聚乙二醇-叠氮&#xff0c;其所属分类为Azide PEG Fluorescent PEG。 Fluorescein-PEG-Azide的分子量均可定制&#xff1a;荧光素-peg 20000-叠氮/Fluorescein-PEG 5000-Azide、…

47-用户和权限管理

47-用户和权限管理用户的管理和相关管理命令用户的基础概念用户UID区分用户类别创建用户- useradd修改用户- usermod删除用户- userdel修改用户密码- passwd实验&#xff1a;用户的管理文件用户组的基础概念用户组GID用户组分类创建组- groupadd修改组-groupmod删除组- groupde…

qt 样式表 qss

Qt样式表是一个可以自定义部件外观的十分强大的机制﹐除了那些能够通过子类化QStyle更改的外观,其余的都可以使用Qt样式表来美化。 实现办法&#xff1a;调用setStyleSheet 函数&#xff0c;其中styleSheet一般通过读取配置文件.qss实现。 void setStyleSheet(const QString&a…

volatile如何保证可见性

在Java中&#xff0c; volatile关键字可以保证变量的可见性&#xff0c;如果我们将变量声明为 volatile&#xff0c;这就指示 JVM&#xff0c;这个变量是共享且不稳定的&#xff0c;每次使用它都到主存中进行读取。 Java内存模型&#xff1a; 1.Java所有变量都存储在主…

关于java语言当中的this关键字

/*** 关于java语言当中的this关键字&#xff1a;&#xff08;其内存图见下图&#xff09;* 1、this是一个关键字&#xff0c;翻译为&#xff1a;“这个”* 2、this是一个引用&#xff0c;它是一个变量&#xff0c;this变量中保存的内存地址指向了自身&#xff0c;this存…

APISpace接口推荐

APISpace 上面有各种类型的API&#xff0c;短信类、天气环境类、快递物流类、数据智能类等等&#xff0c;并且所有的API都提供的免费的调用次数&#xff0c;这么多的API肯定有你中意的&#xff01;&#xff01;&#xff01;我们超多的热门API推荐给大家&#xff1a; IP归属地A…

CUDA与cuDNN安装教程(超详细)

前言 windows10 和win11安装 CUDA &#xff0c;首先需要下载两个安装包 CUDA toolkit&#xff08;toolkit就是指工具包&#xff09; cuDNN 用于配置深度学习使用 官方教程 CUDA&#xff1a;Installation Guide Windows :: CUDA Toolkit Documentation (nvidia.com) cuDNN&…

ADMIN云计算系统管理

云计算系统管理一、inux简介Unix/Linux发展史操作系统 —— UNICS&#xff0c;后改为UNIXLinux版本及应用Red Hat系列版本二、Linux系统的安装三、Linux预备知识Linux目录结构四、Linux基本操作获取命令行右键“打开终端”命令行提示符pwd — Print Working Directorycd — Cha…

01-微服务探讨(摘)

1. 前言 1.1 微服务目的 有效地拆分应用&#xff0c;实现敏捷开发和部署&#xff0c;最终的目标是实现敏捷开发和部署&#xff0c;实现的方式是围绕业务能力*有效地拆分应用*。 微服务就是从各种角度&#xff0c;包括组织的、技术的等来阐释怎样有效地拆分应用&#xff0c;相对…

SSM-Spring

Spring Framwork 1. 核心概念 1.1 IoC控制反转 inversion of control控制反转 使用对象是主动由外部提供对象&#xff0c;此过程对象创建控制权由程序转移到外部。 Spring 提供IoC容器&#xff0c;用来充当IoC思想中的外部。负责创建和初始化等工作&#xff0c;被创建的对象再…

04-HTTPS证书格式及转换

PEM格式的证书文件&#xff08;*.pem&#xff09;由Base64编码的二进制内容和开头行&#xff08;-----BEGIN CERTIFICATE-----&#xff09;、结束行&#xff08;-----END CERTIFICATE-----&#xff09;组成&#xff0c;支持使用EditPlus等文本编辑器打开。本文介绍了将不同格式…

[附源码]java毕业设计教室用电控制系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

数据库的备份和还原(slqserver)

数据库的备份 1.语法&#xff1a; BACKUP DATABASE { database_name | database_name_var } TO <backup_device> [,...n] [ WITH{COPY_ONLY| NAME {backup_set_name | backup_set_name_var }| { NOINIT | INIT }| DESCRIPTION { test | text_variable }| PASSWORD { …

双端队列(双端bfs)解决边权只包含0和1的最短路问题

电路维修 达达是来自异世界的魔女&#xff0c;她在漫无目的地四处漂流的时候&#xff0c;遇到了善良的少女翰翰&#xff0c;从而被收留在地球上。 翰翰的家里有一辆飞行车。有一天飞行车的电路板突然出现了故障&#xff0c;导致无法启动。电路板的整体结构是一个 R行 C 列的网…

关于 re.sub 部分替换的解决办法

关于 re.sub 部分替换的解决办法写作背景问题重现解决办法代码详解结尾写作背景 最近本菜鸡遇到一个问题&#xff0c;我想将字符串中某一部分替换成指定内容&#xff0c;而且为了定位到要替换的内容&#xff0c;所以使用正则的时候还需要前后一些字符作为锚点&#xff0c;这可…

linux下基本命令

linux下基本命令一、linux相关快捷键二、linux下内部命令和外部命令2.1 内建命令2.2 外部命令2.3 内建命令和外部命令对比2.4 命令类型查看方法2.4 内建命令和外部命令帮助三、man手册四、相对路径和绝对路径五、pwd和cd命令六、mkdir创建目录七、rmdir删除目录八、linux文件类…