我想根据从解析的xml文档中获取的信息显示树视图结构。它必须只显示“ItemName”,并且取决于节点的“Level”,它假设为1级是父级,2级是子级,3级是childs子级(叶子)。
我想在添加子节点时遇到错误,或者当我遍历xml节点时,它只保存最后一个节点和子节点。
这是我到目前为止所做的事情
请注意,这必须显示在窗体结构视图
上private void TreeNodeStrcutureManually(XmlDocument structure)
{
treeView1.Nodes.Clear();
XmlElement root = structure.DocumentElement;
XmlNodeList itemName = root.GetElementsByTagName("ItemName");
XmlNodeList level = root.GetElementsByTagName("Level");
string parent = "";
string childNode1 = "";
string childNode2 = "";
{
for (int i = 0; i < itemName.Count; i++)
{
TreeNode tNode;
if (level.Item(i).InnerText == "1")
{
parent = itemName.Item(i).InnerText;
tNode = treeView1.Nodes.Add(parent);
}
if (level.Item(i).InnerText == "2")
{
childNode1 = itemName.Item(i).InnerText;
tNode.Nodes.Add(childNode1);
}
if (level.Item(1).InnerText == "3")
{
childNode2 = itemName.Item(i).InnerText;
tNode.Nodes.Add(childNode2);
}
}
}
以下是如何返回xml的示例:
<HR>
<ItemName> Addidas</ItemName>
<level> 1 </level>
</HR>
<HR>
<ItemName> Shoe </ItemName>
<level> 2 </level>
</HR>
<HR>
<ItemName> Tshirt </ItemName>
<level> 2 </level>
</HR>
<HR>
<ItemName> shoelace </ItemName>
<level> 2 </level>
</HR>
<HR>
<ItemName> Running </ItemName>
<level> 3 </level>
</HR>
<HR>
<ItemName> Nike </ItemName>
<level> 1 </level>
</HR>
答案 0 :(得分:0)
这是一个如何使用treeview节点来创建Hierarchic结构的示例。 您必须为每个分支拥有TreeNode对象。 正如您在示例中看到的那样,父级和子级之间必须存在“绑定”。 希望能帮助到你。
private void TreeNodeStrcutureManually()
{
TreeNode level1=new TreeNode();
TreeNode level2=new TreeNode();
TreeNode level3=new TreeNode();
TreeNode level4=new TreeNode();
TreeNode level5=new TreeNode();
for (int i = 0; i <= 4; i++)
{
switch (i)
{
case 0:
level1 = treeView1.Nodes.Add("LEVEL1");
break;
case 1:
level2 = level1.Nodes.Add("LEVEL2");
break;
case 2:
level3 = level2.Nodes.Add("LEVEL3");
break;
case 3:
level4 = level3.Nodes.Add("LEVEL4");
break;
case 4:
level5 = level4.Nodes.Add("LEVEL5");
break;
default:
break;
}
}
}
<强>更新强>
你解析xml的方式不正确,这就是你得到的原因:
对象引用未设置为对象的实例。
这是更有效和严格的方法:
private void TreeNodeStrcutureManually(XmlDocument x)
{
TreeNode level1 = new TreeNode();
TreeNode level2 = new TreeNode();
TreeNode level3 = new TreeNode();
XmlNodeList nl = x.SelectNodes("DOC");
XmlNode root = nl[0];
foreach (XmlNode xnode in root.ChildNodes)
{
string level = xnode.LastChild.InnerText;
switch (level)
{
case " 1 ":
level1 = treeView1.Nodes.Add(level);
break;
case " 2 ":
level2 = level1.Nodes.Add(level);
break;
case " 3 ":
level3 = level2.Nodes.Add(level);
break;
default:
break;
}
}
}
,那就是带有<DOC> </DOC>
父标记的xml:
另请注意,level1节点的值具有空格(“1”的内容为“1”)。
- <DOC>
- <HR>
<ItemName>Addidas</ItemName>
<level>1</level>
</HR>
- <HR>
<ItemName>Shoe</ItemName>
<level>2</level>
</HR>
- <HR>
<ItemName>Tshirt</ItemName>
<level>2</level>
</HR>
- <HR>
<ItemName>shoelace</ItemName>
<level>2</level>
</HR>
- <HR>
<ItemName>Running</ItemName>
<level>3</level>
</HR>
- <HR>
<ItemName>Nike</ItemName>
<level>1</level>
</HR>
</DOC>