国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C# 遞歸讀取XML菜單數據

2019-11-17 02:46:35
字體:
來源:轉載
供稿:網友

C# 遞歸讀取xml菜單數據

在博客園注冊了有4年了,很遺憾至今仍未發表過博客,趁周末有空發表第一篇博客。小生不才,在此獻丑了!

最近在研究一些關于C#的一些技術,縱觀之前的開發項目的經驗,做系統時顯示系統菜單的功能總是喜歡把數據寫在數據庫表,然后直接讀取加載到菜單樹上顯示。

現在想把菜單數據都放在XML里,然后遞歸讀取XML。

由于項目使用WCF,實體類使用了兩個,一個是業務邏輯層中的實體,一個是調用業務邏輯層遞歸方法后進行數據實體的轉換,XML讀取方法寫在業務邏輯層中。

思路:1.先讀取XML里所有的菜單2.根據用戶的權限顯示所屬用戶的菜單加載到頁面上

XML數據如下:

 1   <?xml version="1.0" encoding="utf-8"?> 2   <ZCSoft.Net xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 3    <applications> 4       <Application ID ="OA" Text="OA管理系統"> 5         <Modules> 6           <Module ID="OA_System" Text="系統管理"> 7             <Menus> 8             <Menu ID="OA_System_UserManager" Text="人員管理" URL="System/UserManager/UserManagerList.aspx"> </Menu> 9               <Menu ID="OA_System_RoleManager" Text="角色管理" URL="System/RoleManager/RoleManagerList.aspx"></Menu>10               <Menu ID="OA_System_LoginLog" Text="登錄日志" URL="System/Log/LoginLogList.aspx"></Menu>11             <Menu ID="OA_System_OperateLog" Text="操作日志" URL="System/Log/OperateLogList.aspx"></Menu>12             </Menus>13           </Module>14   15           <Module ID="OA_TargetManage" Text="目標管理">16             <Menus>17               <Menu ID="OA_TargetManage_TargetSetup" Text="目標設定" URL="OA/TargetManage/TargetSetupList.aspx">18               </Menu>19             </Menus>20           </Module>21         </Modules>22       </Application>23  </ZCSoft.Net>
View Code

菜單的業務邏輯實體類:

 1 public class MenuTreeSearchModel 2     { 3     //菜單ID 4         public string ItemCode { get; set; } 5  6     //菜單名稱 7         public string ItemName { get; set; } 8  9     //菜單顯示類型10         public string ItemType { get; set; }11 12     //排序13         public int ItemOrder { get; set; }14 15     //是否顯示16         public bool Visible { get; set; }17 18     //菜單鏈接19         public string ItemUrl { get; set; }20 21     //上級ID22         public string ParentItem { get; set; }23 24     //系統平臺ID25         public string ApplicationCode { get; set; }26 27     //系統平臺名稱28         public string ApplicationName { get; set; }29 30     //模塊ID31         public string ModuleCode { get; set; }32 33     //模塊名稱34         public string ModuleName { get; set; }35     }
View Code

遞歸方法,讀取每個模塊和模塊下的菜單:

 1 PRotected void GetChildMenuList(XElement root, List<MenuTreeSearchModel> menuTreeList) 2         { 3             var firstNode = root.FirstNode as XElement;//讀取root節點內的第一個節點 4             if (null != firstNode) 5             { 6         //讀取root節點下面同級的所有節點 7                 var appList = 8                         from ele in root.Element(firstNode.Name.LocalName).Elements() 9                         select ele;10 11                 bool thisVisible = true;//默認節點是可見的12                 XAttribute thisAttr = root.Attribute("Display");13                 if (null != thisAttr)//如果菜單的上級模塊有顯示屬性14                 {15                     string thisDisplay = thisAttr.Value;16                     thisVisible = thisDisplay.ToLower() == "false" ? false : true;17                 }18 19                 foreach (var application in appList)20                 {21                     //模塊Display屬性22                     XAttribute modAttr = application.Attribute("Display");23                     bool visible = true;24                     if (null != modAttr)25                     {26                         string display = application.Attribute("Display").Value;27                         visible = display.ToLower() == "false" ? false : true;28                     }29                     var nextNode = application.FirstNode as XElement;//該節點的下級節點30                    31                     string itemType = "Folder";//目錄還是菜單32                     string itemUrl = null;//鏈接地址33                     string parentItem = null;//上一節點ID34                     string applicationCode = null;//平臺編碼35                     string applicationName = null;//平臺名稱36                     string moduleCode = null;//模塊編碼37                     string moduleName = null;//模塊名稱38 39                     if (application.Name.LocalName == "Application")40                     {41                         applicationCode = application.Attribute("ID").Value;42                         applicationName = application.Attribute("Text").Value;43                     }44 45                     if (application.Name.LocalName == "Module")46                     {47                         moduleCode = application.Attribute("ID").Value;48                         moduleName = application.Attribute("Text").Value;49                         applicationCode = root.Attribute("ID").Value;50                         applicationName = root.Attribute("Text").Value;51 52                         if (thisVisible) //如果該模塊的所屬平臺中的Display屬性設置為可見true(注意:沒有設置則默認為可見),則模塊的上級為Application的ID53                         {54                             parentItem = root.Attribute("ID").Value;55                         }56                     }57 58                     if (application.Name.LocalName == "Menu")59                     {60                         itemType = "Menu";61                         itemUrl = application.Attribute("URL").Value;62                         moduleCode = root.Attribute("ID").Value;63                         moduleName = root.Attribute("Text").Value;64                         applicationCode = root.Parent.Parent.Attribute("ID").Value;65                         applicationName = root.Parent.Parent.Attribute("Text").Value;66 67                         if (thisVisible) //如果該菜單的所屬模塊中的Display屬性設置為可見true(注意:沒有設置則默認為可見),則菜單的上級為Module的ID68                         {69                             parentItem = root.Attribute("ID").Value;70                         }71                         else//如果該菜單的所屬模塊中的Display屬性設置為不可見false,則菜單的上級為Application的ID72                         {73                             parentItem = root.Parent.Parent.Attribute("ID").Value;74                         }75                     }76 77                     MenuTreeSearchModel model = new MenuTreeSearchModel();78                     model.ItemCode = application.Attribute("ID").Value;79                     model.ItemName = application.Attribute("Text").Value;80                     model.ItemType = itemType;81                     model.ItemOrder = 0;82                     model.Visible = visible;83                     model.ItemUrl = itemUrl;84                     model.ParentItem = parentItem;85                     model.ApplicationCode = applicationCode;86                     model.ApplicationName = applicationName;87                     model.ModuleCode = moduleCod
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 房产| 年辖:市辖区| 巧家县| 牙克石市| 蒲江县| 江陵县| 襄汾县| 嘉禾县| 迁安市| 藁城市| 林西县| 松潘县| 青铜峡市| 宝丰县| 青神县| 兴文县| 奉新县| 普格县| 昌图县| 五莲县| 长宁区| 贵南县| 益阳市| 浑源县| 尉氏县| 临沂市| 漳州市| 南宁市| 广安市| 濮阳市| 炎陵县| 上思县| 金华市| 通化市| 尚义县| 新郑市| 岑巩县| 富民县| 兴仁县| 郁南县| 西平县|