/// <summary>
/// 从XML中读取数据到TreeView
/// </summary>
/// <param name="openXmlDlg">打开文件对话框</param>
/// <param name="treeViewControl">某一层次的节点集合</param>
public void ReadXmlToTreeView(OpenFileDialog openXmlDlg, TreeView treeViewControl)
{
openXmlDlg.DefaultExt = "xml";
openXmlDlg.Filter = "XML Files (*.xml)|*.xml";
openXmlDlg.FilterIndex = 1;
if (openXmlDlg.ShowDialog() == DialogResult.OK)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(openXmlDlg.FileName); // 装载XML文件
treeViewControl.BeginUpdate();
treeViewControl.Nodes.Clear();
XmlNode node = xmlDoc.DocumentElement; // 读取XML文件的根结点
// string tempText = (node.Value != null ? node.Value : (node.Attributes != null && node.Attributes.Count > 0) ? node.Attributes[5].Value : node.Name);
string tempText = node.Name;
TreeNode rootNode = new TreeNode(tempText);
rootNode.Name = node.Name;
treeViewControl.Nodes.Add(rootNode); // 首先把根结点填入TreeView控件
rootNode.ToolTipText = tempText;
XmlNodeToTreeNode(xmlDoc.DocumentElement, rootNode.Nodes); // 利用递归的方法读取XML所有节点并填入TreeView控件
treeViewControl.EndUpdate();
}
} /// <summary>
/// 递归的方法读取XML所有节点并填入TreeView控件
/// </summary>
/// <param name="documentElement">xml文档中的单个节点</param>
/// <param name="nodes">所有节点集合</param>
public void XmlNodeToTreeNode(XmlNode documentElement, TreeNodeCollection nodes)
{
foreach (XmlNode node in documentElement.ChildNodes)
{
//string tempText = (node.Value != null ? node.Value : (node.Attributes != null && node.Attributes.Count > 0) ? node.Attributes[5].Value : node.Name);
string tempText = node.Name;
//创建一个树节点,参数tempText代表树节点的Text属性
TreeNode newChild = new TreeNode(tempText);
//为树节点的Name属性赋值
newChild.Name = node.Name;
newChild.ToolTipText = tempText;
//添加树节点
nodes.Add(newChild);
XmlNodeToTreeNode(node, newChild.Nodes);
} }
上面是我写的代码,建议你主要看一下我注释调的语句
//string tempText = (node.Value != null ? node.Value : (node.Attributes != null && node.Attributes.Count > 0) ? node.Attributes[5].Value : node.Name);
/// 从XML中读取数据到TreeView
/// </summary>
/// <param name="openXmlDlg">打开文件对话框</param>
/// <param name="treeViewControl">某一层次的节点集合</param>
public void ReadXmlToTreeView(OpenFileDialog openXmlDlg, TreeView treeViewControl)
{
openXmlDlg.DefaultExt = "xml";
openXmlDlg.Filter = "XML Files (*.xml)|*.xml";
openXmlDlg.FilterIndex = 1;
if (openXmlDlg.ShowDialog() == DialogResult.OK)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(openXmlDlg.FileName); // 装载XML文件
treeViewControl.BeginUpdate();
treeViewControl.Nodes.Clear();
XmlNode node = xmlDoc.DocumentElement; // 读取XML文件的根结点
// string tempText = (node.Value != null ? node.Value : (node.Attributes != null && node.Attributes.Count > 0) ? node.Attributes[5].Value : node.Name);
string tempText = node.Name;
TreeNode rootNode = new TreeNode(tempText);
rootNode.Name = node.Name;
treeViewControl.Nodes.Add(rootNode); // 首先把根结点填入TreeView控件
rootNode.ToolTipText = tempText;
XmlNodeToTreeNode(xmlDoc.DocumentElement, rootNode.Nodes); // 利用递归的方法读取XML所有节点并填入TreeView控件
treeViewControl.EndUpdate();
}
} /// <summary>
/// 递归的方法读取XML所有节点并填入TreeView控件
/// </summary>
/// <param name="documentElement">xml文档中的单个节点</param>
/// <param name="nodes">所有节点集合</param>
public void XmlNodeToTreeNode(XmlNode documentElement, TreeNodeCollection nodes)
{
foreach (XmlNode node in documentElement.ChildNodes)
{
//string tempText = (node.Value != null ? node.Value : (node.Attributes != null && node.Attributes.Count > 0) ? node.Attributes[5].Value : node.Name);
string tempText = node.Name;
//创建一个树节点,参数tempText代表树节点的Text属性
TreeNode newChild = new TreeNode(tempText);
//为树节点的Name属性赋值
newChild.Name = node.Name;
newChild.ToolTipText = tempText;
//添加树节点
nodes.Add(newChild);
XmlNodeToTreeNode(node, newChild.Nodes);
} }
上面是我写的代码,建议你主要看一下我注释调的语句
//string tempText = (node.Value != null ? node.Value : (node.Attributes != null && node.Attributes.Count > 0) ? node.Attributes[5].Value : node.Name);
改成
newtreeNode.Text = node.InnerText; private void fillTree(XmlNodeList XmlNode, TreeNodeCollection treeNode)
{
foreach (XmlNode node in XmlNode)
{
if (node.NodeType != XmlNodeType.Element) continue; TreeNode newtreeNode = new TreeNode();
newtreeNode.Value = node.InnerText;
try
{
string a = "";
a = node.Attributes["Name"].Value + node.Attributes["Age"].Value + node.Attributes["Hobby"].Value;
newtreeNode.Target = a;
}
catch { newtreeNode.Target = ""; }
if (node.HasChildNodes) fillTree(node.ChildNodes, newtreeNode.ChildNodes); treeNode.Add(newtreeNode);
}
}
你可以试试Node.text字段嘛……这个问题……
tvMain.Nodes.Clear();
//读取Xml文件
XmlDocument myXml = new XmlDocument();
myXml.Load("Student.Xml"); XmlNodeList list = doc.GetElementsByTagName("Student");
foreach (XmlNode node in list)
{
if (node.NodeType != XmlNodeType.Element) continue; TreeNode newtreeNode = new TreeNode();
newtreeNode.Text = node.InnerText;
treeView1.Nodes.Add(newtreeNode);
}
还有LZ要注意了:XML文件是区分大小写的!象LZ给出的XML文件中,张靓和周杰的Student大小写不一致,不知道是不是LZ的笔误,反正如果不一致的话GetElementsByTagName是取不出来的