版权所有,禁止匿名转载;禁止商业使用。
解析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();