【问题标题】:Display XML data in TreeView control using LINQ使用 LINQ 在 TreeView 控件中显示 XML 数据
【发布时间】:2013-05-25 06:26:10
【问题描述】:

如何使用 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#

【问题讨论】:

标签: c# winforms linq linq-to-xml


【解决方案1】:

解析您的 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 class 和 LINQ2XML 的文档,例如从 XDocument helper class 开始


假设你的 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 property 来存储每个TreeNode 的信息。

【讨论】:

  • thx @pasty 但是现在,如何使用 Linq 将 TreeView 数据保存在 XML 中?
  • 我在答案中添加了用于从树节点创建和保存 XML 的示例代码。
猜你喜欢
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-15
相关资源
最近更新 更多