/**//*-------------------------------------------------------------
* 作者:刘晓松
* 版本:1.0.0
* 日期:2006.10.29
* 描述:将TreeView中导出为XML数据
-------------------------------------------------------------*/
using System;
using System.Collections;
using System.IO;
using System.Windows.Forms;
namespace TreeViewExport
...{
/**//// <summary>
/// 将TreeView中导出为XML数据
/// </summary>
public class TreeViewToXmlB
...{
//XML每行的内容
private string xmlLine = "";
//用于写XML文件
private StreamWriter sr;
/**//// <summary>
/// 构造函数
/// </summary>
public TreeViewToXmlB()
...{
}
/**//// <summary>
/// 将TreeView中导出为XML数据
/// </summary>
/// <param name="tv">TreeView控件</param>
/// <param name="filename">XML文件的保存路径</param>
public void exportToXml(TreeView tv, string filename)
...{
sr = new StreamWriter(filename, false, System.Text.Encoding.UTF8);
//写文件头部内容
//下面是生成RSS的OPML文件
sr.WriteLine("<?xml version="1.0" encoding="UTF-8"?>");
sr.WriteLine("<opml version="1.0">");
sr.WriteLine("<head>");
sr.WriteLine("<title>RSS</title>");
sr.WriteLine("</head>");
sr.WriteLine("<body>");
//遍历根节点
foreach (TreeNode node in tv.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();
}
//递归遍历节点内容,最关键的函数
private void parseNode(TreeNode tn)
...{
IEnumerator ie = tn.Nodes.GetEnumerator();
while (ie.MoveNext())
...{
TreeNode ctn = (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文本行
private string GetRSSText(TreeNode node)
...{
//根据Node属性生成XML文本
string rssText = "<outline type="rss" text="" + node.Text + "" xmlUrl="URL"/>";
return rssText;
}
//成生目录节点的XML文本行
private string GetDirectoryText(TreeNode node)
...{
//根据Node属性生成XML文本
string directoryText = "<outline text="" + node.Text + "">";
return directoryText;
}
}
}
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。