如何将特定节点从xml导入treeview c#
我目前正在制作一个以xml文件作为输入的工具,并希望在树视图中显示xml中的数据。问题是我不需要导入所有数据,只需要导入一些特定的数据 即:我有xml文件的这一部分:如何将特定节点从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"/>
<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();
}
}