如何通过将树视图中的节点绑定到 XML 文档的节点来显示树节点
Posted
技术标签:
【中文标题】如何通过将树视图中的节点绑定到 XML 文档的节点来显示树节点【英文标题】:How to display treenodes by binding nodes in the treeview to nodes of the XML document 【发布时间】:2009-03-02 14:20:43 【问题描述】:我有一个 Treeview,在其中选择一个节点时,属性和值必须显示在列表框中。 在treeView1_AfterSelect中,文本解析代码依赖于树视图中某个节点的文本表示,可以随时更改,打破了列表显示的整个逻辑。树视图和列表显示之间的这种强依赖关系应该通过将树视图中的节点绑定到 XML 文档的节点来消除,以便可以使用原始 Xml 数据在列表中显示文本。我应该在这里写什么?
private static void AddingNodesToTree(XmlNode xmlNode,TreeNode tnode)
//Adding nodes to tree while looping through the entire XML file
if (xmlNode.HasChildNodes)
XmlNodeList nodeList = xmlNode.ChildNodes;
for (int i = 0; i <= nodeList.Count - 1; i++)
XmlNode xmladdtreeNode = xmlNode.ChildNodes[i];
String nodetype = "" + xmladdtreeNode.NodeType;
if (nodetype.Equals("Text") || nodetype.Equals("Comment"))
tnode.Nodes.Add(new TreeNode(xmladdtreeNode.InnerText));
else
String name = "<" + xmladdtreeNode.Name;
XmlAttributeCollection attCol = xmladdtreeNode.Attributes;
foreach (XmlAttribute xmlatt in attCol)
name += " " + xmlatt.Name + "=\"" + xmlatt.Value + "\"";
name += ">";
TreeNode tn = new TreeNode(xmladdtreeNode.Name);
tn.Text = name;
tnode.Nodes.Add(tn);
TreeNode treeNode = tnode.Nodes[i];
AddingNodesToTree(xmladdtreeNode,treeNode);
//for
//if
else
tnode.Text = xmlNode.OuterXml.Trim();
//else
//AddingNodesToTree
//To show Attributes and values of selected Nodes.
private void treeView1_AfterSelect(object sender,TreeViewEventArgs e)
TreeNode treenode = e.Node; //Node selected in Treeview
String text = treenode.Text;
String relevent = text;
Boolean flag = true;
while (flag)
int SpaceIndex = relevent.IndexOf(" ");
if (SpaceIndex != -1)
int indexofEqual = relevent.IndexOf('=', SpaceIndex);
if (indexofEqual != -1)
int indexOFValue = relevent.IndexOf("\"", indexofEqual + 2);
if (indexOFValue != -1)
String attribute = relevent.Substring(SpaceIndex + 1, indexofEqual - SpaceIndex - 1);
String value = relevent.Substring(indexofEqual + 2, indexOFValue - indexofEqual - 2);
listBox1.Items.Add("Attribute : " + attribute + " Value : " + value);
relevent = relevent.Substring(indexOFValue);
else
listBox1.Items.Add("Bad format of the xml file for this node");
flag = false;
else
flag = false;
else
flag = false;
//AfterSelect()
谢谢……
【问题讨论】:
【参考方案1】:如果我正确理解了这个问题,您希望在选择 TreeNode 时返回 XmlNode。通常的解决方案是将 XmlNode 存储在 Tag 属性中:
TreeNode tn = new TreeNode();
tn.Text = name;
tn.Tag = xmladdtreeNode;
在 AfterSelect 中
TreeNode treenode = e.Node;
XmlNode xmlNode = (XmlNode) treeNode.Tag;
【讨论】:
请看你给我语法的答案。【参考方案2】:我试过了,但在这一行得到了 NullRefrenceException foreach(attCol 中的 XmlAttribute xmlatt) 在 attcol 上
这是我写的代码..
private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
listBox1.Items.Clear();
XmlNode xNode = e.Node.Tag as XmlNode;
XmlAttributeCollection attCol = xNode.Attributes;
foreach (XmlAttribute xmlatt in attCol)
listBox1.Items.Add(xmlatt.Name);
listBox1.Items.Add(xmlatt.Value);
//AfterSelect()
【讨论】:
谢谢我得到了我出错的地方并修复了它。以上是关于如何通过将树视图中的节点绑定到 XML 文档的节点来显示树节点的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Xml 属性绑定到 Treeview 节点,同时将 XDocument 数据绑定到 WPF Treeview