怎么样将TreeView数据导出为XML数据?
怎么样将TreeView数据导出为XML数据?
/*-------------------------------------------------------------
*作者:刘晓松
*版本:1.0.0
*日期:2006.10.29
*描述:将TreeView中导出为XML数据
-------------------------------------------------------------*/
usingSystem;
usingSystem.Collections;
usingSystem.IO;
usingSystem.Windows.Forms;
namespaceTreeViewExport
{
///<summary>
///将TreeView中导出为XML数据
///</summary>
publicclassTreeViewToXmlB
{
//XML每行的内容
privatestringxmlLine="";
//用于写XML文件
privateStreamWritersr;
///<summary>
///构造函数
///</summary>
publicTreeViewToXmlB()
{
}
///<summary>
///将TreeView中导出为XML数据
///</summary>
///<paramname="tv">TreeView控件</param>
///<paramname="filename">XML文件的保存路径</param>
publicvoidexportToXml(TreeViewtv,stringfilename)
{
sr=newStreamWriter(filename,false,System.Text.Encoding.UTF8);
//写文件头部内容
//下面是生成RSS的OPML文件
sr.WriteLine("<?xmlversion="1.0"encoding="UTF-8"?>");
sr.WriteLine("<opmlversion="1.0">");
sr.WriteLine("<head>");
sr.WriteLine("<title>RSS</title>");
sr.WriteLine("</head>");
sr.WriteLine("<body>");
//遍历根节点
foreach(TreeNodenodeintv.Nodes)
{
if(node.GetNodeCount(true)==0)
{
xmlLine=GetRSSText(node);
}
else
{
xmlLine=GetDirectoryText(node);
}
sr.WriteLine(xmlLine);
//递归遍历节点
parseNode(node);
}
//写文件尾部内容
sr.WriteLine("</body>");
sr.WriteLine("</opml>");
sr.Close();
}
//递归遍历节点内容,最关键的函数
privatevoidparseNode(TreeNodetn)
{
IEnumeratorie=tn.Nodes.GetEnumerator();
while(ie.MoveNext())
{
TreeNodectn=(TreeNode)ie.Current;
//为最底层节点,即该节点为RSS节点
if(ctn.GetNodeCount(true)==0)
{
xmlLine=GetRSSText(ctn);
sr.WriteLine(xmlLine);
}
else//不是最底层节点,即该节点为目录节点
{
xmlLine=GetDirectoryText(ctn);
sr.WriteLine(xmlLine);
}
//如果还有子节点则继续遍历
if(ctn.GetNodeCount(true)>0)
{
parseNode(ctn);
}
}
sr.WriteLine("</outline>");
}
//成生RSS节点的XML文本行
privatestringGetRSSText(TreeNodenode)
{
//根据Node属性生成XML文本
stringrssText="<outlinetype="rss"text=""+node.Text+""xmlUrl="URL"/>";
returnrssText;
}
//成生目录节点的XML文本行
privatestringGetDirectoryText(TreeNodenode)
{
//根据Node属性生成XML文本
stringdirectoryText="<outlinetext=""+node.Text+"">";
returndirectoryText;
}
}
}
*作者:刘晓松
*版本:1.0.0
*日期:2006.10.29
*描述:将TreeView中导出为XML数据
-------------------------------------------------------------*/
usingSystem;
usingSystem.Collections;
usingSystem.IO;
usingSystem.Windows.Forms;
namespaceTreeViewExport
{
///<summary>
///将TreeView中导出为XML数据
///</summary>
publicclassTreeViewToXmlB
{
//XML每行的内容
privatestringxmlLine="";
//用于写XML文件
privateStreamWritersr;
///<summary>
///构造函数
///</summary>
publicTreeViewToXmlB()
{
}
///<summary>
///将TreeView中导出为XML数据
///</summary>
///<paramname="tv">TreeView控件</param>
///<paramname="filename">XML文件的保存路径</param>
publicvoidexportToXml(TreeViewtv,stringfilename)
{
sr=newStreamWriter(filename,false,System.Text.Encoding.UTF8);
//写文件头部内容
//下面是生成RSS的OPML文件
sr.WriteLine("<?xmlversion="1.0"encoding="UTF-8"?>");
sr.WriteLine("<opmlversion="1.0">");
sr.WriteLine("<head>");
sr.WriteLine("<title>RSS</title>");
sr.WriteLine("</head>");
sr.WriteLine("<body>");
//遍历根节点
foreach(TreeNodenodeintv.Nodes)
{
if(node.GetNodeCount(true)==0)
{
xmlLine=GetRSSText(node);
}
else
{
xmlLine=GetDirectoryText(node);
}
sr.WriteLine(xmlLine);
//递归遍历节点
parseNode(node);
}
//写文件尾部内容
sr.WriteLine("</body>");
sr.WriteLine("</opml>");
sr.Close();
}
//递归遍历节点内容,最关键的函数
privatevoidparseNode(TreeNodetn)
{
IEnumeratorie=tn.Nodes.GetEnumerator();
while(ie.MoveNext())
{
TreeNodectn=(TreeNode)ie.Current;
//为最底层节点,即该节点为RSS节点
if(ctn.GetNodeCount(true)==0)
{
xmlLine=GetRSSText(ctn);
sr.WriteLine(xmlLine);
}
else//不是最底层节点,即该节点为目录节点
{
xmlLine=GetDirectoryText(ctn);
sr.WriteLine(xmlLine);
}
//如果还有子节点则继续遍历
if(ctn.GetNodeCount(true)>0)
{
parseNode(ctn);
}
}
sr.WriteLine("</outline>");
}
//成生RSS节点的XML文本行
privatestringGetRSSText(TreeNodenode)
{
//根据Node属性生成XML文本
stringrssText="<outlinetype="rss"text=""+node.Text+""xmlUrl="URL"/>";
returnrssText;
}
//成生目录节点的XML文本行
privatestringGetDirectoryText(TreeNodenode)
{
//根据Node属性生成XML文本
stringdirectoryText="<outlinetext=""+node.Text+"">";
returndirectoryText;
}
}
}