从 TreeView 保存到 XML [英] Save to XML from TreeView
问题描述
我在从 TreeView
保存数据时遇到问题.我在谷歌上搜索了很多关于如何将数据从 TreeView
保存到 XML
的主题,我看到了一些如何做到这一点的方法.但是他们都在使用 WindowsForms 应用程序
,而没有人 - WPF
.我试图将这些示例转换为 WPF
,但其中没有一个不能正常工作.有什么办法可以做到吗?我尝试移植的方法之一:
I have a problem with saving my data from TreeView
. I've googled a lot of topics how to save data from TreeView
to XML
, and I saw i few methods how to make that. But all of them were using WindowsForms application
, and nobody - WPF
. I tried to convert those examples to WPF
, but no one from them do not work correct. Is there any way to make it? One of the ways I tried to port:
void SaveToXml(TreeView tw)
{
XmlDocument d = new XmlDocument();
XmlNode n = d.CreateNode(XmlNodeType.Element, "root", "");
foreach (TreeViewItem t in tw.Items)
{
n.AppendChild(getXmlNode(t, d));
}
d.AppendChild(n);
d.Save(AppDomain.CurrentDomain.BaseDirectory + "out.xml");
}
private XmlNode getXmlNode(TreeViewItem tnode, XmlDocument d)
{
XmlNode n = d.CreateNode(XmlNodeType.Element, tnode.Name, " ");
foreach (TreeViewItem t in tnode.Items)
{
n.AppendChild(getXmlNode(t, d));
}
return n;
}
它抛出ArgumentException
本地元素和属性的名称不能为空".我正在尝试使用以下代码在我的 D:\
驱动器上保存有关文件的信息:
It throws ArgumentException
"Local element's and attribute's names cannot be empty". I'm trying to save info about files on my D:\
drive using code:
private void ListDirectory(TreeView treeView, string path)
{
var rootDirectoryInfo = new DirectoryInfo(path);
treeView.Items.Add(CreateDirectoryNode(rootDirectoryInfo));
}
private static TreeViewItem CreateDirectoryNode(DirectoryInfo directoryInfo)
{
var directoryNode = new TreeViewItem();
directoryNode.Header = directoryInfo.Name;
try
{
foreach (var directory in directoryInfo.GetDirectories())
directoryNode.Items.Add(CreateDirectoryNode(directory));
foreach (var file in directoryInfo.GetFiles())
directoryNode.Items.Add(new TreeViewItem { Header = file.Name });
}
catch (UnauthorizedAccessException e)
{ }
return directoryNode;
}
它工作正常,TreeView
显示所有文件夹和文件.请告诉我如何将数据从 TreeView
保存到 XML
.谢谢.
It works fine, and TreeView
shows all the folders and files. Please, show me how to save data from TreeView
to XML
. Thanks.
试过这个:
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("<ROOT>");
foreach (TreeViewItem node in tv.Items)
{
saveNode(node.Items);
}
//Close the root node
sr.WriteLine("</ROOT>");
sr.Close();
}
private void saveNode(TreeViewItem[] tnc)
{
foreach (TreeViewItem node in tnc)
{
//If we have child nodes, we'll write
//a parent node, then iterrate through
//the children
if (node.Items.Count > 0)
{
sr.WriteLine("<" + node.Name + ">");
saveNode(node.Items);
sr.WriteLine("</" + node.Name + ">");
}
else //No child nodes, so we just write the text
sr.WriteLine(node.Name);
}
}
但是 saveNode(node.Items);
说 node.Items
和 TreeViewItem[]
之间有不同的类型,所以我试过了List
,但是报错是一样的.
But saveNode(node.Items);
says that there are different types between node.Items
and TreeViewItem[]
, so I tried List<TreeViewItem>
, but error is the same.
推荐答案
恐怕这不是真正的答案,但您可以尝试替换此行:
I'm afraid this is not a real answer, but you may try replacing this line :
saveNode(node.Items);
有了这个:
saveNode(node.Items.OfType<TreeViewItem>().ToArray());
希望这会有所帮助,
从 xml 文档中获取缩进字符串的示例:
Example of getting an indented string from an xml doc :
public static String ToString(XmlDocument doc)
{
StringBuilder sb = new StringBuilder();
XmlTextWriter mywriter = new XmlTextWriter(new StringWriter(sb));
mywriter.Formatting = Formatting.Indented;
doc.WriteTo( mywriter );
mywriter.Flush();
return(sb.ToString());
}
这篇关于从 TreeView 保存到 XML的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!