使用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#
解析您的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的信息。