[C#]利用LINQ解析XML至POCO方法
时间:2014-07-23 08:22 来源: 我爱IT技术网 作者:山风
解析XML有很多方法,有个较简单的解析就是用Linq查询。
有如下menu_config.xml
- <?xml version="1.0" encoding="utf-8"?>
- <menu_config>
- <menu title="文章管理" url="~/Article" target="" allow="">
- <submenu title="列表" url="~/Article/list" allow="" />
- <submenu />
- <submenu title="新增" url="~/Article/add" allow="" />
- </menu>
- <menu />
- <menu title="帐号管理" url="~/Admin" />
- </menu_config>
实现过程的代码:
- //using System.Collections.Generic;
- //using System.IO;
- //using System.Linq;
- //using System.Xml.Linq;
- //using System.Text;
- public class MenuDataModel
- {
- /*POCO 数据栏位*/
- public string Title { get; set; }
- public string Url { get; set; }
- public string Target { get; set; }
- public string Allow { get; set; }
- public string Icon { get; set; }
- public List<MenuDataModel> Submenu { get; set; }
- /*取得数据清单*/
- public static List<MenuDataModel> GetList(string menuConfigPath)
- {
- /*读取 XML 文件*/
- var xmlContent = File.ReadAllText(menuConfigPath, Encoding.UTF8);
- var menuDocument = XDocument.Parse(xmlContent);
- /*利用 LINQ 转成 POCO*/
- return menuDocument.Root.Elements("menu")
- .Select(menu => new MenuDataModel
- {
- /*取得 Element 上的 Attribute*/
- Title = (string) menu.Attribute("title"),
- Url = (string) menu.Attribute("url"),
- Target = (string) menu.Attribute("target"),
- Icon = (string) menu.Attribute("icon") ?? "Item",
- Allow = (string) menu.Attribute("allow"),
- /*取得子层 Element 上的 Attribute*/
- Submenu = menu.Elements("submenu")
- .Select(sub => new MenuDataModel
- {
- Title = (string) sub.Attribute("title"),
- Url = (string) sub.Attribute("url"),
- Target = (string) sub.Attribute("target"),
- Icon = (string) sub.Attribute("icon") ?? "Item",
- Allow = (string) sub.Attribute("allow"),
- }).ToList(),
- }).ToList();
- }
- }
- void Main()
- {
- var path = @"D:\menu_config.xml";
- List<MenuDataModel> list = MenuDataModel.GetList(path);
- list.Dump();
- }
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
