Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将特定节点从xml导入treeview c#_C#_Xml_Winforms_Treeview - Fatal编程技术网

如何将特定节点从xml导入treeview c#

如何将特定节点从xml导入treeview c#,c#,xml,winforms,treeview,C#,Xml,Winforms,Treeview,我目前正在制作一个以xml文件作为输入的工具,并希望在树视图中显示xml中的数据。问题是我不需要导入所有数据,只需要导入一些特定的数据 即:我有xml文件的这一部分: <grADI:ObjectTree> <grADI:Display> <grADI:StaticDisplayAttributes> <grADI:ModelIntErrPageId Value="OS_PAG65"/>

我目前正在制作一个以xml文件作为输入的工具,并希望在树视图中显示xml中的数据。问题是我不需要导入所有数据,只需要导入一些特定的数据

即:我有xml文件的这一部分:

<grADI:ObjectTree>
    <grADI:Display>
      <grADI:StaticDisplayAttributes>
        <grADI:ModelIntErrPageId Value="OS_PAG65"/>          
        <grADI:SwapAxes Value="false"/>
      </grADI:StaticDisplayAttributes>
      <grADI:Layer>
        <grADI:StaticLayerAttributes>
          <grADI:ApplicationColorPalette Value="DRWSPC2"/>
          <grADI:ColorPaletteColorSpace Value="COLSPC2"/>   
        </grADI:StaticLayerAttributes>
        <grADI:ChangeableAttribute Mode="Fix" Type="AlphaVal" Value="100"/>
        <grADI:SignalSet>
          <grADI:Signal DataType="BOOL" Max="1" Min="0" Name="VolvoASample.ly_boBackground_act" SignalID="2" Type="Activate"/>
        </grADI:SignalSet>
   </grADI:Layer>
   <grADI:Layer>
        <grADI:StaticLayerAttributes>
          <grADI:ApplicationColorPalette Value="DRWSPC2"/>
          <grADI:ColorPaletteColorSpace Value="COLSPC2"/>   
        </grADI:StaticLayerAttributes>
        <grADI:ChangeableAttribute Mode="Fix" Type="AlphaVal" Value="100"/>
        <grADI:SignalSet>
          <grADI:Signal DataType="BOOL" Max="1" Min="0" Name="VolvoASample.ly_boBackground_act" SignalID="2" Type="Activate"/>
        </grADI:SignalSet>
   </grADI:Layer>
我找到了一种打印所有节点的方法,但是当我添加if语句以仅限制我需要的节点时,我在这行“new_tree_node=tree_node.nodes[I];”上出现了“参数超出范围异常”错误

private void BindTreeViewText()
{
尝试
{
XmlDocument xml_doc=新的XmlDocument();
xml_doc.Load(“grADIExportData.xml”);
treeView1.Nodes.Clear();
添加(新的TreeNode(xml_doc.Name));
TreeNode rnode=treeView1.Nodes[0];
AddText(xml_doc.DocumentElement,rnode);
treeView1.ExpandAll();
}
捕获(XmlException xe)
{
MessageBox.Show(xe.Message);
}
}
私有void AddText(XmlNode xml_节点,TreeNode树_节点)
{
XmlNode新的XmlNode;
树节点新树节点;
XmlNodeList xml_列表;
int i;
if(xml_node.HasChildNodes)
{
xml_list=xml_node.ChildNodes;

对于(i=0;iIt应该是:new_tree_node=xml_list[i];new_tree_node是TreeNode类型,xml_list[i]是XmlNode类型。变量i是xml_list中的项数,而不是tree_node。如果我使用new_tree_node=xml_list[i],它将弹出一个转换错误(无法从TreeNode转换为XmlNode)。您确实想将其设置为:new TreeNode(new_xml_node.Attributes[“Name”].Value),但此对象没有名称。因此,请执行Add two语句并为该对象指定一个变量名。
     grADI:Display
         grADI:Layer
         grADI:Layer
         private void BindTreeViewText()
        {
            try
            {
                XmlDocument xml_doc = new XmlDocument();
                xml_doc.Load("grADIExportData.xml");
                treeView1.Nodes.Clear();
                treeView1.Nodes.Add(new TreeNode(xml_doc.Name));
                TreeNode rnode = treeView1.Nodes[0];
                AddText(xml_doc.DocumentElement, rnode);
                treeView1.ExpandAll();
            }
            catch(XmlException xe)
            {
                MessageBox.Show(xe.Message);
            }
        }

          private void AddText(XmlNode xml_node, TreeNode tree_node)
                   {
                       XmlNode new_xml_node;
                       TreeNode new_tree_node;
                       XmlNodeList xml_list;
                       int i;
                       if(xml_node.HasChildNodes)
                       {
                           xml_list = xml_node.ChildNodes;
                           for(i=0;i<=xml_list.Count-1;i++)
                           {
                               new_xml_node = xml_node.ChildNodes[i];
                               if (new_xml_node.Name== "grADI:Display" || new_xml_node.Name == "grADI:Layer" )
                               {
                                   tree_node.Nodes.Add(new TreeNode(new_xml_node.Attributes["Name"].Value));
                               }                            
                               new_tree_node = tree_node.Nodes[i];
                               AddText(new_xml_node, new_tree_node);

                           }
                       }
                       else
                       {
                           tree_node.Text = (xml_node.OuterXml).Trim();
                       }
                   }