C#如何操纵XML文件,把数据显示到TreeView中。
环境:VS2010 .Net 4.0
XML文档。
拜求完成以下功能:
使用C#操纵XML(代码如下),在TreeView中树形显示出来。
最好能提供一个详细的程序代码和流程。
我用了一个Treeview,一个bottom。
忙碌了一天还是没有解决好....崩溃中
<?xml version="1.0" encoding="utf-8"?><Config_File> <Device> <Name>惯性</Name> <SignalFormat> <Name>000格式</Name> <Signal> <中文>角</中文> <变量>ithetal</变量> <DataType>short int (32位)</DataType> <Lable>324</Lable> <MSBEnable>1shishiwangdizhi</MSBEnable> <MSBValue>90</MSBValue> <MSB>27</MSB> <LSB>8</LSB> <矩阵>3</矩阵> <校验>奇</校验> <地址>0x10000</地址> </Signal> </SignalFormat> <SignalFormat> <Name>物理量</Name> <Signal> <中文>角</中文> <变量>fthetal</变量> <DataType>float(32位)</DataType> <地址>0x10002</地址> </Signal> </SignalFormat> </Device> <Device> <Name>计算机</Name> <SignalFormat> <Name>111格式</Name> <Signal> <中文>方式</中文> <变量>Mode</变量> <DataType>unsigned short(16位)</DataType> <地址>0x10006</地址> <属性> <字段> <中文>命令</中文> <低位>15</低位> <高位>15</高位> </字段> <字段> <中文>模式</中文> <低位>14</低位> <高位>13</高位> </字段> </属性> </Signal> <Signal> <中文>最高</中文> <变量>Hrmin</变量> <DataType>unsigned short(16位)</DataType> <MSBEnable>0</MSBEnable> <MSBValue>0.01</MSBValue> <MSB>15</MSB> <LSB>0</LSB> <地址>0x10008</地址> </Signal> </SignalFormat> <SignalFormat> <Name>物理量</Name> <Signal> <中文>命令</中文> <变量>ModeCommd</变量> <DataType>int(32位)</DataType> <地址>0x1000c</地址> </Signal> <Signal> <中文>模式</中文> <变量>Mode</变量> <DataType>int(32位)</DataType> <地址>0x10010</地址> </Signal> <Signal> <中文>最小</中文> <变量>fHrmin_DcmsIc_m</变量> <DataType>float(32位)</DataType> <地址>0x10014</地址> </Signal> </SignalFormat> </Device> <Device> <Name>大气</Name> <SignalFormat> <Name>1553格式</Name> <Signal> <中文>有效字</中文> <变量>Word</变量> <DataType>unsigned short(16位)</DataType> <地址>0x10018</地址> <属性> <字段> <中文>高有效</中文> <低位>15</低位> <高位>15</高位> <含义>1="有效";0="无效"</含义> </字段> <字段> <中文>速有效</中文> <低位>14</低位> <高位>14</高位> <含义>1="有效";0="无效"</含义> </字段> </属性> </Signal> <Signal> <中文>高(Hp)</中文> <变量>Hp</变量> <DataType>short int(16位)</DataType> <MSBEnable>1</MSBEnable> <MSBValue>16384</MSBValue> <MSB>14</MSB> <LSB>0</LSB> <地址>0x1001a</地址> </Signal> </SignalFormat> <SignalFormat> <Name>物理量</Name> <Signal> <中文>高有效</中文> <变量>Valid</变量> <DataType>int(32位)</DataType> <地址>0x1001c</地址> </Signal> <Signal> <中文>速</中文> <变量>Valid</变量> <DataType>int(32位)</DataType> <地址>0x10020</地址> </Signal> <Signal> <中文>高</中文> <变量>fHr</变量> <DataType>float(32位)</DataType> <地址>0x10024</地址> </Signal> </SignalFormat> </Device></Config_File>
private void XmlOperation_Load(object sender, EventArgs e) { path = AppDomain.CurrentDomain.BaseDirectory + @"NameList.xml"; xml.Load(path);//加载xml文件 bindTvXml(); } /// <summary> /// 绑定TreeView /// </summary> private void bindTvXml() { for (int i = 0; i < xml.DocumentElement.ChildNodes.Count; i++) { XmlNode Xnode = xml.DocumentElement.ChildNodes[i]; TreeNode node = new TreeNode(); node.Text = Xnode.Attributes["name"].Value; node.Tag = Xnode; bindChildNode(node, Xnode);//绑定子节点 TvXml.Nodes.Add(node); TvXml.HideSelection = false; } } /// <summary> /// 递归绑定子节点 /// </summary> /// <param name="node"></param> /// <param name="xml"></param> private void bindChildNode(TreeNode node, XmlNode xml) { for (int i = 0; i < xml.ChildNodes.Count; i++) { TreeNode Childnode = new TreeNode(); XmlNode ChildXml = xml.ChildNodes[i]; Childnode.Text = ChildXml.Value; Childnode.Name = "1"; Childnode.Tag = xml.ChildNodes[i]; if (ChildXml.HasChildNodes) { if (ChildXml.ChildNodes[0].NodeType == XmlNodeType.Text) Childnode.Text = ChildXml.ChildNodes[0].InnerText; else bindChildNode(Childnode, ChildXml); } node.Nodes.Add(Childnode); } }