C# 中读取xml 并 生成菜单项 树形菜单
2013-03-29 17:11
471 查看
本示例中提供了传统读取xml的方法 还使用了.net 4.0中的linq to xml方式 欢迎提供建议
Xml 代码
C# 代码
生成的效果图 如下:
Xml 代码
<?xml version="1.0" encoding="utf-8" ?> <menu> <node group="gp_dbstreats_checker"> <parentid>0</parentid> <pageid>1</pageid> <name>Request List</name> <pagename>Request List</pagename> <desc></desc> <type></type> <sort></sort> <url></url> <isshow>true</isshow> <target></target> <node> <node group="gp_dbstreats_checker"> <parentid>1</parentid> <pageid>2</pageid> <name>Program</name> <pagename>Program</pagename> <desc>Program</desc> <type></type> <sort>0</sort> <url>forapproval/program/Program.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker"> <parentid>1</parentid> <pageid>3</pageid> <name>Merchant Category</name> <pagename>Merchant Category</pagename> <desc>Merchant Category</desc> <type></type> <sort>1</sort> <url>forapproval/category/Category.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker"> <parentid>1</parentid> <pageid>4</pageid> <name>Coupon Category</name> <pagename>Coupon Category</pagename> <desc>Coupon Category</desc> <type></type> <sort>2</sort> <url>forapproval/couponCategory/CouponCategory.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker"> <parentid>1</parentid> <pageid>5</pageid> <name>Card Loan Upload</name> <pagename>Card Loan Upload</pagename> <desc>Card Loan Upload</desc> <type></type> <sort>3</sort> <url>forapproval/forUploadModule/cardLoanUpload.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker"> <parentid>1</parentid> <pageid>6</pageid> <name>E-Coupon Upload</name> <pagename>E-Coupon Upload</pagename> <desc>E-Coupon Upload</desc> <type></type> <sort>3</sort> <url>forapproval/forUploadModule/eCouponUpload.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker"> <parentid>1</parentid> <pageid>7</pageid> <name>Selective Base Upload</name> <pagename>Selective Base Upload</pagename> <desc>Selective Base Upload</desc> <type></type> <sort>0</sort> <url>forapproval/forUploadModule/selectiveBaseUpload.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> </node> </node> <node group="gp_dbstreats_checker"> <parentid>0</parentid> <pageid>8</pageid> <name>Program Manage</name> <pagename>Program Manage</pagename> <desc>Program Manage</desc> <type>0</type> <sort>1</sort> <url></url> <isshow>true</isshow> <target></target> <node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>8</parentid> <pageid>9</pageid> <name>Program List</name> <pagename>Program LIst</pagename> <desc>Program List</desc> <type></type> <sort>0</sort> <url>Program/Program.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>8</parentid> <pageid>10</pageid> <name>Merchant Category</name> <pagename>Merchant Category</pagename> <desc>Merchant Category</desc> <type></type> <sort>1</sort> <url>Program/category/Category.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>8</parentid> <pageid>11</pageid> <name>Coupon Category</name> <pagename>Coupon Category</pagename> <desc>Coupon Category</desc> <type></type> <sort>2</sort> <url>Program/couponCategory/CouponCategory.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>8</parentid> <pageid>12</pageid> <name>Request List</name> <pagename>Request List</pagename> <desc>Request List</desc> <type></type> <sort>3</sort> <url>Program/ProgramList.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> </node> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>0</parentid> <pageid>13</pageid> <name>Upload Module</name> <pagename>Upload Module</pagename> <desc>Upload Module</desc> <type>0</type> <sort>2</sort> <url></url> <isshow>true</isshow> <target></target> <node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>13</parentid> <pageid>14</pageid> <name>Selective Base</name> <pagename>Selective Base</pagename> <desc>Selective Base</desc> <type></type> <sort>0</sort> <url>uploadCsv/UploadSelectiveBase.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>13</parentid> <pageid>15</pageid> <name>Card Loan</name> <pagename>Card Loan</pagename> <desc>Card Loan</desc> <type></type> <sort>1</sort> <url>uploadCsv/UploadCardLoan.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>13</parentid> <pageid>16</pageid> <name>Card Loan</name> <pagename>Card Loan</pagename> <desc>Card Loan</desc> <type></type> <sort>2</sort> <url>uploadCsv/UploadECoupon.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> </node> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker,gp_dbstreats_cs"> <parentid>0</parentid> <pageid>17</pageid> <name>Registration Manage</name> <pagename>Registration Manage</pagename> <desc>Registration Manage</desc> <type>0</type> <sort>3</sort> <url></url> <isshow>true</isshow> <target></target> <node> <node group="gp_dbstreats_checker,gp_dbstreats_maker,gp_dbstreats_cs"> <parentid>17</parentid> <pageid>18</pageid> <name>Registration Records</name> <pagename>Registration Records</pagename> <desc>Registration Records</desc> <type></type> <sort>0</sort> <url>report/Registration.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker,gp_dbstreats_cs"> <parentid>17</parentid> <pageid>19</pageid> <name>Resend Email</name> <pagename>Resend Email</pagename> <desc>Resend Email</desc> <type></type> <sort>1</sort> <url>report/ResendEmail.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group=""> <parentid>17</parentid> <pageid>20</pageid> <name>Registration E-Coupon</name> <pagename>Registration E-Coupon</pagename> <desc>Registration E-Coupon</desc> <type></type> <sort>2</sort> <url>report/RegistrationECoupon.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>17</parentid> <pageid>21</pageid> <name>Card Loan Records</name> <pagename>Card Loan Records</pagename> <desc>Card Loan Records</desc> <type></type> <sort>3</sort> <url>report/RegistrationCardLoan.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> </node> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker,gp_dbstreats_cs,gp_dbstreats_cs_sup"> <parentid>0</parentid> <pageid>22</pageid> <name>Membership Manager</name> <pagename>Membership Manager</pagename> <desc>Membership Manager</desc> <type>0</type> <sort>4</sort> <url></url> <isshow>true</isshow> <target></target> <node> <node group="gp_dbstreats_cs"> <parentid>22</parentid> <pageid>23</pageid> <name>Member Statistics</name> <pagename>Member Statistics</pagename> <desc>Member Statistics</desc> <type></type> <sort>0</sort> <url>MemberShip/MemberStatistics.aspx</url> <isshow>false</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_maker,gp_dbstreats_cs"> <parentid>22</parentid> <pageid>24</pageid> <name>View|edit member details</name> <pagename>View|edit member details</pagename> <desc>View|edit member details</desc> <type></type> <sort>1</sort> <url>MemberShip/MemberShipList.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_checker,gp_dbstreats_maker"> <parentid>22</parentid> <pageid>25</pageid> <name>Fullfillment Manage</name> <pagename>Fullfillment Manage</pagename> <desc>Fullfillment Manage</desc> <type></type> <sort>2</sort> <url>MemberShip/MemberShipECoupon.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> <node group="gp_dbstreats_cs,gp_dbstreats_cs_sup"> <parentid>22</parentid> <pageid>26</pageid> <name>E-Coupon Management</name> <pagename>E-Coupon Management</pagename> <desc>E-Coupon Management</desc> <type></type> <sort>3</sort> <url>MemberShip/ecoupon/ECouponManagement.aspx</url> <isshow>true</isshow> <target>navTab</target> </node> </node> </node> </menu>
C# 代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Text; using System.Xml; using System.Text.RegularExpressions; using System.Xml.Linq; public class XmlMenu { private string group; private string name; private string parentColumnName; private string itemColumnName; private string itemUrlColumnName; private string itemTargetColumnName; public XmlMenu(string name, string userGroup) : this(name, "pageid", "name", "url", "target") { this.group = userGroup; this.name = name; } public XmlMenu(string name, string parentColumnName, string itemColumnName, string itemUrlColumnName, string itemTargetColumnName) { this.name = name; this.parentColumnName = parentColumnName; this.itemColumnName = itemColumnName; this.itemUrlColumnName = itemUrlColumnName; this.itemTargetColumnName = itemTargetColumnName; } public string Build() { if (string.IsNullOrEmpty(group)) return ""; StringBuilder sbMenu = sbMenu = new StringBuilder(); StringBuilder sbMenuItem = null; XmlDocument doc = new XmlDocument(); string filepath = HttpContext.Current.Server.MapPath("~/menuRight/userRight.xml"); doc.Load(filepath); //选取属于当前分组的菜单项 XmlNodeList nodelist = doc.SelectNodes("/menu/node"); sbMenu.AppendFormat("<ul id=\"{0}\" class=\"tree treeFolder\">", name); XmlAttribute attributeGroup = null; //root foreach (XmlNode root in nodelist) { attributeGroup = root.Attributes["group"]; var val1 = attributeGroup.Value.Split(',').Where(i => i == group); if (val1.Count() > 0) { if (val1.First().ToString() == group) { XmlNode el_name = root.SelectSingleNode(itemColumnName); XmlNode el_url = root.SelectSingleNode(itemUrlColumnName); sbMenu.Append("<li class=\"root\">"); if (string.IsNullOrEmpty(el_url.InnerText)) { XmlNodeList nodes = root.SelectNodes("nodes/node"); sbMenu.AppendFormat("<a>{0}</a>", el_name.InnerText); sbMenuItem = new StringBuilder(); sbMenuItem.Append("<ul>"); foreach (XmlNode node in nodes) { attributeGroup = node.Attributes["group"]; var val2 = attributeGroup.Value.Split(',').Where(i => i == group); if (val2.Count() > 0) { if (val2.First().ToString() == group) { XmlNode node_name = node.SelectSingleNode(itemColumnName); XmlNode node_url = node.SelectSingleNode(itemUrlColumnName); XmlNode node_pageid = node.SelectSingleNode(parentColumnName); XmlNode node_target = node.SelectSingleNode(itemTargetColumnName); XmlNode node_isshow = root.SelectSingleNode("isshow"); if (node_isshow.InnerText == "true") { sbMenuItem.AppendFormat("<li><a href=\"{1}\" target=\"{2}\" rel=\"page{3}\">{0}</a></li>", node_name.InnerText, node_url.InnerText, node_target.InnerText, node_pageid.InnerText); } } } } sbMenuItem.Append("</ul>"); sbMenu.Append(sbMenuItem); } } } sbMenu.Append("</li>"); } sbMenu.Append("</ul>"); return sbMenu.ToString(); } public string BuildUseLinq() { if (string.IsNullOrEmpty(group)) return ""; StringBuilder sbMenu = sbMenu = new StringBuilder(); StringBuilder sbMenuItem = null; string filepath = HttpContext.Current.Server.MapPath("~/menuRight/userRight.xml"); XDocument menu = XDocument.Load(filepath); //父节点 var rootsEl = menu.Root.Elements("node").Where(e => e.Attribute("group").Value.Contains(group) && e.Element("isshow").Value=="true").ToList(); sbMenu.AppendFormat("<ul id=\"{0}\" class=\"tree treeFolder\">", name); foreach (var root in rootsEl) { sbMenu.Append("<li class=\"root\">"); sbMenu.AppendFormat("<a>{0}</a>", root.Element(itemColumnName).Value); sbMenuItem = new StringBuilder(); sbMenuItem.Append("<ul>"); //子节点 var nodes = root.Element("node").Elements("node").Where(e => e.Attribute("group").Value.Contains(group) && (e.Element("isshow").Value == "true")).ToList(); foreach (var node in nodes) { sbMenuItem.AppendFormat("<li><a href=\"{1}\" target=\"{2}\" rel=\"page{3}\">{0}</a></li>", node.Element(itemColumnName).Value, node.Element(itemUrlColumnName).Value, node.Element(itemTargetColumnName).Value, node.Element(parentColumnName).Value); } sbMenuItem.Append("</ul>"); sbMenu.Append(sbMenuItem); sbMenu.Append("</li>"); } sbMenu.Append("</ul>"); return sbMenu.ToString(); } }
生成的效果图 如下:
相关文章推荐
- c#使用Dataset读取XML文件动态生成菜单的方法
- c#从数据库读取数据动态生成树形菜单
- c#:Dataset读取XML文件动态生成菜单
- C# 选择文件夹,读取文件夹下文件和文件夹生成XML
- Unity——读取xml文件生成一级树形菜单
- C#,读取Xml生成菜单
- c# winform读取xml创建菜单
- C# 利用xml动态生成带图标菜单
- C#递归读取XML菜单数据的方法
- 216-----xml读取,树形菜单展开,收缩
- c#读取XML内容实现动态加载菜单
- C#中读取xml文件和生成xml文件
- C# 编写代码生成XML文件,并从XML中读取出数据
- javascript操作xml生成树形菜单
- C#中关于XML的读取和生成
- 从数据库读取数据动态生成树形菜单示例
- C#使用Linq To XML读取XML,Linq生成XML,Linq创建带属性或带节点XML
- c# winform读取xml文件创建菜单的代码
- javascript操作xml生成树形菜单
- c# 读取opencv 生成的svm训练好的xml分类器