本人想实现一个读写xml文件的windows程序,可是不晓得怎样才能动态增加xml文件的节点到Treeview中,下面是我写了开头的东东,有没有高手指点一下啊,初学.net,还望多多指教!窗体上只放了一个TreeView控件和三个Button
private void bOpen_Click(object sender, System.EventArgs e)
{
openFile();
}
private void bSave_Click(object sender, System.EventArgs e)
{
}
private void bExit_Click(object sender, System.EventArgs e)
{
this.Close();
}
public void openFile()
{
OpenFileDialog openFileDg = new OpenFileDialog();
openFileDg.Filter = "XML Files(*.xml)|*.xml|Config Files(*.config)|*.config";
openFileDg.FilterIndex = 1;
openFileDg.Multiselect = false;
if(openFileDg.ShowDialog() == DialogResult.OK)
{
FilePath.Text = openFileDg.FileName;//显示文件路径
FileInfo fi = new FileInfo(openFileDg.FileName);//显示文件最后修改时间
LastModifiedTime.Text = fi.LastWriteTime.ToString();
}
XmlDocument doc = new XmlDocument();
doc.Load(openFileDg.FileName);
if(doc.NodeType == XmlNodeType.Element)
{ }
}
private void bOpen_Click(object sender, System.EventArgs e)
{
openFile();
}
private void bSave_Click(object sender, System.EventArgs e)
{
}
private void bExit_Click(object sender, System.EventArgs e)
{
this.Close();
}
public void openFile()
{
OpenFileDialog openFileDg = new OpenFileDialog();
openFileDg.Filter = "XML Files(*.xml)|*.xml|Config Files(*.config)|*.config";
openFileDg.FilterIndex = 1;
openFileDg.Multiselect = false;
if(openFileDg.ShowDialog() == DialogResult.OK)
{
FilePath.Text = openFileDg.FileName;//显示文件路径
FileInfo fi = new FileInfo(openFileDg.FileName);//显示文件最后修改时间
LastModifiedTime.Text = fi.LastWriteTime.ToString();
}
XmlDocument doc = new XmlDocument();
doc.Load(openFileDg.FileName);
if(doc.NodeType == XmlNodeType.Element)
{ }
}
HOW TO: Populate a TreeView Control with XML Data in Visual C# .NET
HOW TO: Populate a TreeView Control with XML Data in Visual Basic .NET
if ( this.treeViewNavigator.Focused )
{
//修改后的标题显示
treeViewNavigator.SelectedNode.Text = Pub.NavEdtTitle ;
//保存到Navigator.xml
XmlDocument doc = new XmlDocument();
doc.Load(Pub.XMLNavigator);
string XPath = "//Navigator[@ID=\"" + Pub.NavEdtTag + "\"]" ;
XmlNode xNode = doc.DocumentElement.SelectSingleNode(XPath) ; //保存或删除语音文件
if ( File.Exists(Pub.TempWAV) )
{
djcvt.WavetoPcm(Pub.TempWAV, Pub.VOCPathNavigator + "\\" + xNode.Attributes["ID"].Value + ".pcm") ;
File.Delete(Pub.TempWAV) ;
}
else
{
string FileToDelete = Pub.VOCPathNavigator + "\\" + xNode.Attributes["ID"].Value + ".pcm" ;
if ( File.Exists(FileToDelete) ) File.Delete(FileToDelete) ;
} xNode.Attributes["Title"].Value = Pub.NavEdtTitle ;
xNode.Attributes["Re"].Value = Pub.NavEdtRe ; doc.Save(Pub.XMLNavigator) ;
this.SetNavigatorToolBarButtonAfterSelectTree() ;
}
#endregion
private void LoadNavigatorTreeFromXml()
{
try
{
XmlDocument dom = new XmlDocument() ;
dom.Load(Pub.XMLNavigator) ;
treeViewNavigator.Nodes.Clear() ;
AddTreeNode(dom.DocumentElement, null);
}
catch(XmlException xmlEx)
{
MessageBox.Show(xmlEx.Message) ;
}
catch(Exception Ex)
{
MessageBox.Show(Ex.Message) ;
}
}
#endregion #region //从Navigator.xml文件装入导航叶
private void LoadNavigatorLeafFromXml()
{
this.listViewNavigator.Items.Clear() ; XmlDocument doc = new XmlDocument();
doc.Load(Pub.XMLNavigator);
string ID = this.treeViewNavigator.SelectedNode.Tag.ToString() ;
string XPath = "//Navigator[@ID=\"" + ID + "\"]/child::Navigator[@Type=\"Leaf\"]" ; XmlNodeList xNodeList = doc.DocumentElement.SelectNodes(XPath) ;
for ( int i = 0; i < xNodeList.Count; i++ )
{
this.listViewNavigator.Items.Add(xNodeList[i].Attributes["Title"].Value) ;
this.listViewNavigator.Items[listViewNavigator.Items.Count - 1].Tag = xNodeList[i].Attributes["ID"].Value ;
}
this.SetNavigatorToolBarButtonAfterSelectTree() ;
}
#endregion
#region //处理导航树节点
private TreeNode ProcessTreeNode(XmlNode xNode, TreeNodeCollection tCol)
{
//装入导航树节点标题
TreeNode tNode = new TreeNode() ;
tNode = tCol.Add(xNode.Attributes["Title"].Value) ; //记录导航树节点ID值
tNode.Tag = xNode.Attributes["ID"].Value ;
//装入导航数节点图标
if ( tNode.Parent == null ) //根节点
{
tNode.ImageIndex = 0 ;
tNode.SelectedImageIndex = 0 ;
}
else //子节点
{
tNode.ImageIndex = tNode.Index + 1 ;
tNode.SelectedImageIndex = tNode.Index + 1 ;
} return tNode ;
}
#endregion
#region //添加导航树节点
private void AddTreeNode(XmlNode inXmlNode, TreeNode inTreeNode)
{
XmlNode xNode;
TreeNode tNode;
XmlNodeList nodeList;
//
if ( inTreeNode == null )
{
try
{
inTreeNode = ProcessTreeNode(inXmlNode, this.treeViewNavigator.Nodes);
}
catch(Exception e)
{
MessageBox.Show(e.Message);
this.treeViewNavigator.Nodes.Clear() ;
}
} //
if (inXmlNode.HasChildNodes)
{
nodeList = inXmlNode.ChildNodes;
for(int i = 0; i<=nodeList.Count - 1; i++)
{
try
{
xNode = inXmlNode.ChildNodes[i];
//只装载导航的树部分
if ( xNode.Attributes["Type"].Value == "Tree" )
{
tNode = ProcessTreeNode(xNode, inTreeNode.Nodes);
AddTreeNode(xNode, tNode);
}
}
catch(Exception e)
{
MessageBox.Show(e.Message);
this.treeViewNavigator.Nodes.Clear() ;
}
}
}
}
#endregion
<Navigator ID="20050314110500015625" Type="Tree" Title="导航语音总目录" Re="">
<Navigator ID="20050314110544640625" Type="Tree" Title="111" Re="">
<Navigator ID="20050314133042750000" Type="Tree" Title="22" Re="" />
<Navigator ID="20050314133045656250" Type="Leaf" Title="1111" Re="" />
<Navigator ID="20050314133047453125" Type="Leaf" Title="we45t345t645456" Re="" />
</Navigator>
<Navigator ID="20050314110548890625" Type="Tree" Title="222" Re="" />
<Navigator ID="20050314110550890625" Type="Tree" Title="333" Re="" />
<Navigator ID="20050314110552765625" Type="Tree" Title="444" Re="" />
<Navigator ID="20050314110554531250" Type="Tree" Title="555" Re="" />
<Navigator ID="20050314110556250000" Type="Tree" Title="666" Re="" />
<Navigator ID="20050314110557968750" Type="Tree" Title="777" Re="" />
<Navigator ID="20050314110559765625" Type="Tree" Title="888" Re="" />
<Navigator ID="20050314110601781250" Type="Tree" Title="999" Re="" />
<Navigator ID="20050314110604109375" Type="Tree" Title="000" Re="" />
<Navigator ID="20050314133039703125" Type="Leaf" Title="11" Re="" />
</Navigator>
谢谢了,看了你的代码对我启发很大啊!