C# 通过字符串找对应名称的变量、Winform跨容器调用变量、递归遍历XML
创始人
2024-01-29 00:46:36
0

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

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

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

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> needs, List 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 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> needs, List 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> needs, Dictionary xmlPaths){//遍历节点,直到走到最深,如果最深层不是所需要的节点就删除,否则就访问完删除然后回退一个exceptionRecords = new List();         foreach (KeyValuePair 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 record = new List();//记录当前文件下已被访问的结点recursionVisit(xmlDoc, visitNode, needs, record);}}}

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

图片来自网络

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...