作者name2name2 (yang~hi)
看板C_Sharp
标题Re: [问题] XML to treeview
时间Fri Oct 14 01:47:29 2016
之前刚好有碰xml和TreeNode,
刚才有空花一小时试写的结果在此提供参考,有讨论或问题我之後可再回覆
我刚有放上github,
https://github.com/name2name2/TreeViewXMLTest
可下载看源码
我主要是用winform测试的,
主要专案为TreeViewXMLTest所以也是起始专案
(另外一个Test专案是我做一点测试用的)
item的XML部份我是放在专案的XML.xml档,读取内容後生成TreeView
---------------------
放主程式码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;
namespace TreeViewXMLTest
{
public partial class Form1 : Form
{
TreeView treeView = new TreeView();
public Form1()
{
InitializeComponent();
//取得XElement
XElement X = XElement.Load("XML.xml");
var Xitems = X.XmlSerachElementXI("item");
if (Xitems != null)
{
TreeNode rootNode = new TreeNode("Root");
//为每个item建立一个property的依序层级node,并加至rootNode
foreach (XElement item in Xitems)
{
TreeNode ItemNode = new
TreeNode(item.Elements().ElementAt(0).Value);
AddChildNode(ItemNode, item, 1);
rootNode.Nodes.Add(ItemNode);
}
treeView.Nodes.Add(rootNode);
}
treeView.Width = 300;
treeView.Height = 300;
this.Controls.Add(treeView);
}
/// <summary>
/// 递回加子节点
/// </summary>
/// <param name="tNode"></param>
/// <param name="item"></param>
/// <param name="pos"></param>
private void AddChildNode(TreeNode tNode, XElement item, int pos)
{
var property = item.Elements().ElementAtOrDefault(pos);
if (property!=null)
{
tNode.Nodes.Add(property.Value);
AddChildNode(tNode.FirstNode, item, ++pos);
}
}
}
}
-----------
一个自订辅助方法
public static class Assit
{
public static IEnumerable<XElement> XmlSerachElementXI(this XElement
X, string SearchEleXPath)
{//XI >>> Xml的IEnumerable的简写
IEnumerable XI = (IEnumerable)X.XPathEvaluate(SearchEleXPath);
IEnumerable<XElement> XAList = XI.Cast<XElement>();
if (XAList.LongCount() > 0)
return XAList;
else return null;//等於0
}
}
--------
结果画面
http://i.imgur.com/xLcycty.png
※ 引述《largesperm (reindeer)》之铭言:
: 想请教一下有一份 XML 文件 格式大概是长这样
: <item>
: <type>A</type>
: <weight>11</weight>
: <length>111</length>
: <volts>110</volts>
: <aged>1</aged>
: <old>True</old>
: </items>
: <item>
: <type>B</type>
: <weight>22</weight>
: <length>222</length>
: <volts>220</volts>
: <aged>2</aged>
: <old>False</old>
: </items>
: 想把它变成 treeview 类似
: Root
: -> A
: -> 11
: -> 111
: -> 110
: -> 1
: -> True
: -> B
: -> 22
: -> 222
: -> 220
: -> 2
: -> False
: 试了一些方法 感觉都很笨
: 总觉得应该有什麽聪明的方法
: 谢谢
--
应无所住,而生其心
Sent from my
PCMan Combo
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.42.213.240
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1476380854.A.3E6.html
※ 编辑: name2name2 (114.42.213.240), 10/14/2016 01:50:47
※ 编辑: name2name2 (114.42.213.240), 10/14/2016 01:53:05
1F:推 largesperm: 喔喔 感谢 我来研究看看 10/14 08:45
2F:推 oilcaptain: 感谢分享 10/14 09:57