写load部分感觉自己能做点。写save部分就不知道咋写了,希望大家给与帮忙,
/*
* 加载参数
*/
public void LoadPara()
{
XmlDocument myXmlDocument = new XmlDocument();
String sAppIni = Application.StartupPath + "\\" + Application.ProductName + ".xml";
try
{
myXmlDocument.Load(sAppIni);
}
catch
{
MessageBox.Show("请检查文件是否存在:" + sAppIni);
return;
} XmlNodeList nodeList;
nodeList = myXmlDocument.SelectSingleNode("chm").ChildNodes;
//遍历所有子节点
foreach (XmlNode x in nodeList)
{
getchildNode(x);
}
} public void getchildNode(XmlNode nodelist)
{
XmlNodeList myNodeList;
myNodeList = nodelist.SelectSingleNode("Node").ChildNodes;
foreach (XmlNode x in myNodeList)
{
if (x.HasChildNodes)
{
getchildNode(x);
}
else
{
XmlElement xe = (XmlElement)x;
if (xe.Name == "Node")
{
}
if (xe.Name == "file")
{
}
}
}
}
/*
* 加载参数
*/
public void LoadPara()
{
XmlDocument myXmlDocument = new XmlDocument();
String sAppIni = Application.StartupPath + "\\" + Application.ProductName + ".xml";
try
{
myXmlDocument.Load(sAppIni);
}
catch
{
MessageBox.Show("请检查文件是否存在:" + sAppIni);
return;
} XmlNodeList nodeList;
nodeList = myXmlDocument.SelectSingleNode("chm").ChildNodes;
//遍历所有子节点
foreach (XmlNode x in nodeList)
{
getchildNode(x);
}
} public void getchildNode(XmlNode nodelist)
{
XmlNodeList myNodeList;
myNodeList = nodelist.SelectSingleNode("Node").ChildNodes;
foreach (XmlNode x in myNodeList)
{
if (x.HasChildNodes)
{
getchildNode(x);
}
else
{
XmlElement xe = (XmlElement)x;
if (xe.Name == "Node")
{
}
if (xe.Name == "file")
{
}
}
}
}
xml解析到内存的一个中间容器中(可以自己定义一个结构体)
之后 中间容器和treeview关联
treeview改动之后,改变中间容器,再写成xml
这个?
我刚在国内搜了半天,没发现几个人把这个问题讲清楚的,有也是提个问,没下文。是大家都会搞而止于问呢,还是太复杂呢。我只是刚转到。net搞,觉得这是个简单的问题阿,咋大家都没人吭一声的。
我写好贴一个完整的给大家。
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;using System.Xml;
using System.Text;
using System.IO;
/// <summary>
/// 改自http://www.codeproject.com/cs/miscctrl/treeviewxml.asp
/// 原作者:UsualDosage.
/// 改: kenlistian
/// </summary>namespace xml2tree
{public class Xml2TreeList
{
private XmlTextWriter xr;
string xmlfile; public Xml2TreeList(string filename)
{
xmlfile = filename;
if (xmlfile == "")
{
xmlfile = Application.ProductName + ".xml";
}
} //写到xml文件中
public void ToXml(TreeView tv,string sFileName)
{
if (sFileName == "")
sFileName = xmlfile;
xr = new XmlTextWriter(sFileName, System.Text.Encoding.UTF8);
xr.WriteStartDocument();
xr.WriteStartElement(tv.Nodes[0].Text);
foreach (TreeNode node in tv.Nodes)
{
saveNode2(node.Nodes);
} xr.WriteEndElement();
xr.Close();
} //从xml文件中读出到treeview中
// sFileName 读取的文件名
// TreeView 传入的控件树
public bool ToTreeView(TreeView tv, string sFileName)
{
if (sFileName == "")
sFileName = xmlfile;
try
{
XmlDocument xDoc = new XmlDocument();
xDoc.Load(sFileName);
tv.Nodes.Clear(); tv.Nodes.Add(new TreeNode(xDoc.DocumentElement.Name)); TreeNode tNode = new TreeNode();
tNode = (TreeNode)tv.Nodes[0]; addTreeNode(xDoc.DocumentElement, tNode);
tv.ExpandAll();
}
catch (XmlException xExc)
{
// sMsg = xExc.Message;
return false;
}
catch (Exception ex)
{
//sMsg = ex.Message
return false; }
finally
{ }
return true;
} //
private void saveNode2(TreeNodeCollection tnc)
{
foreach (TreeNode node in tnc)
{
if (node.Nodes.Count > 0)
{
xr.WriteStartElement(node.Text);
saveNode2(node.Nodes);
xr.WriteEndElement();
}
else
{
xr.WriteString(node.Text);
}
}
}
//
private void addTreeNode(XmlNode xmlNode, TreeNode treeNode)
{
XmlNode xNode;
TreeNode tNode;
XmlNodeList xNodeList;
if (xmlNode.HasChildNodes)
{
xNodeList = xmlNode.ChildNodes;
for (int x = 0; x <= xNodeList.Count - 1; x++)
{
xNode = xmlNode.ChildNodes[x];
treeNode.Nodes.Add(new TreeNode(xNode.Name));
tNode = treeNode.Nodes[x];
addTreeNode(xNode, tNode);
}
}
else
treeNode.Text = xmlNode.OuterXml.Trim();
}}/* 采用XmlTextWriter方法是一种写xml文件的方法
* 采用StreamWriter 方法也是一种xml文件的方法
private StreamWriter sr;public void exportToXml(TreeView tv, string filename)
{
sr = new StreamWriter(filename, false, System.Text.Encoding.UTF8);
//Write the header
sr.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
//Write our root node
sr.WriteLine("<" + treeView1.Nodes[0].Text + ">");
foreach (TreeNode node in tv.Nodes)
{
saveNode(node.Nodes);
}
//Close the root node
sr.WriteLine("</" + treeView1.Nodes[0].Text + ">");
sr.Close();
}private void saveNode(TreeNodeCollection tnc)
{
foreach (TreeNode node in tnc)
{
//If we have child nodes, we'll write
//a parent node, then iterrate through
//the children
if (node.Nodes.Count > 0)
{
sr.WriteLine("<" + node.Text + ">");
saveNode(node.Nodes);
sr.WriteLine("</" + node.Text + ">");
}
else //No child nodes, so we just write the text
sr.WriteLine(node.Text);
}
}
*/}