日期:2014-05-18  浏览次数:20793 次

转化为xml的问题

怎样将一个TreeView转化为XML导出?



------解决方案--------------------
自己遍历节点,写到xml,跟LINQ没关系 ,treeview的nodes不能用LINQ
------解决方案--------------------
可以用对象

XmlSerializer 序列化与反序列化XML 这样操作更方便
------解决方案--------------------
C# code
XmlTextWriter tw;
public void WriteXML(TreeNodeCollection tc)
{
    foreach (TreeNode Node in tc)
    {
        WriteOneXML(Node);
        WriteXML(Node.Nodes);
        tw.WriteEndElement();
    }
}
 
private void WriteOneXML(TreeNode Node)
{
    string objid = Node.Tag.ToString();
    string objName = Node.Text;
 
    tw.WriteStartElement("cantoncode" + (Node.Level + 1));
    tw.WriteAttributeString("cantoncode", objid);
    tw.WriteAttributeString("cantonname", objName);
 
}
 
private void button3_Click(object sender, EventArgs e)
{
 
    string fileName = @"C:/cantoncode.xml";
    tw = new XmlTextWriter(fileName, null);
    tw.Formatting = Formatting.Indented;
    tw.WriteStartDocument();
 
    tw.WriteStartElement("cantoncode");
    WriteXML(treeView1.Nodes);
 
    tw.WriteEndElement();
    tw.WriteEndDocument();
    tw.Flush();
    tw.Close();
}

------解决方案--------------------
最简单的把 TreeNode.Text 保存为 Xml 节点名的例子
C# code

// 方法
private static void TreeToXml(TreeNodeCollection tree, XmlDocument xmlDoc, XmlNode xml)
{
    foreach (TreeNode item in tree)
    {
        XmlNode node = xml.AppendChild(xmlDoc.CreateElement(item.Text));
        TreeToXml(item.Nodes, xmlDoc, node);
    }
}

// 调用
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.AppendChild(xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null));
XmlNode root = xmlDoc.AppendChild(xmlDoc.CreateElement("root"));
TreeToXml(某TreeView.Nodes, xmlDoc, root);
xmlDoc.Save("保存路径");