解析您的 XML,并根据您想要作为节点的 XML 元素添加它们:
var xmlSource = @"<?xml version=""1.0"" encoding=""utf-8""?>
<factors>
<factor number=""1"" price=""1000"">
<code>12</code>
<group>A</group>
</factor>
<factor number=""2"" price=""10"">
<code>1</code>
<group>B</group>
</factor>
</factors>";
var xml = XDocument.Parse(xmlSource);
var factors = xml.Root.Descendants("factor").ToList();
// create tree and add root node
// TreeView tr = new TreeView();
// var root = tr.Nodes.Add("Factors");
foreach (var factor in factors)
{
var nodeNumber = factor.Attribute("number").Value;
var subNodeCode = factor.Element("code").Value;
// add attribute as node name
// var node = root.Nodes.Add(nodeNumber);
// add elements as sub nodes
// node.Nodes.Add(subNodeCode)
}
从树保存到 XML 的代码完全相同,只是在相反的方向 - 遍历所有节点并提取和构建 xml 元素和/或属性。您应该最清楚要将哪个元素或属性显示为树节点,反之亦然。
阅读TreeView 类和 LINQ2XML 的文档,例如从XDocument 帮助器类开始
假设您的 TreeView 被命名为树,那么您可以使用以下代码从节点快速创建 XML 文档:
var xml = new XDocument();
var rootElement = new XElement("factors");
foreach (TreeNode node in tree.Nodes)
{
foreach (TreeNode subNode in node.Nodes)
{
var attribute = new XAttribute("number", subNode.Text);
var element = new XElement("factor", attribute);
foreach (TreeNode subSubNode in subNode.Nodes)
{
var subElement = new XElement("code", subSubNode.Text);
element.Add(subElement);
}
rootElement.Add(element);
}
}
xml.Add(rootElement);
xml.ToString(); // gives you the XML code
// OR save the XML directly to file
//xml.Save(@"c:\temp\output.xml");
更好和更有效的是编写一个递归函数,让您返回填充的 XElement 对象。您还应该使用Tag TreeNode 属性来存储每个 TreeNode 的信息。