您的位置:首页 > 编程语言 > C#

C# 中读取xml 并 生成菜单项 树形菜单

2013-03-29 17:11 471 查看
本示例中提供了传统读取xml的方法 还使用了.net 4.0中的linq to xml方式 欢迎提供建议

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();
}

}


生成的效果图 如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: