使用LINQ在TreeView控件中显示XML数据

本文关键字:显示 XML 数据 控件 LINQ TreeView 使用 | 更新日期: 2023-09-27 18:15:22

如何使用Linq to XML在TreeView控件中显示XML数据与此相反,使用Linq

将TreeView数据保存为XML

示例XML文件

<?xml version="1.0" encoding="utf-8"?>
<factors>
  <factor number="1" price="1000">
    <code>12</code>
    <group>A</group>
  </factor>
</factors>

我用的是Windows窗体和c#

使用LINQ在TreeView控件中显示XML数据

解析您的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 helper类开始


假设您的TreeView命名为tree,那么使用以下代码,您可以从节点快速创建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的信息。