C# 使用LINQ过滤XML文件
我有一个如下所示的XML文件:C# 使用LINQ过滤XML文件,c#,asp.net,xml,linq,C#,Asp.net,Xml,Linq,我有一个如下所示的XML文件: <SiteMenuItems> <SiteMenuItem text="Home" navigateurl="/Default.aspx" tooltip="Return Home" /> <SiteMenuItem text="Admin" roles="Admin"> <SiteMenuItem text="User Admin" navigateurl="/Authorized
<SiteMenuItems>
<SiteMenuItem text="Home" navigateurl="/Default.aspx" tooltip="Return Home" />
<SiteMenuItem text="Admin" roles="Admin">
<SiteMenuItem text="User Admin" navigateurl="/Authorized/UserAdmin/Default.aspx" roles="SuperAdmin" />
</SiteMenuItem>
</SiteMenuItems>
<SiteMenuItems>
<SiteMenuItem text="Home" navigateurl="/Default.aspx" tooltip="Return Home" />
<SiteMenuItem text="Admin" roles="Admin">
</SiteMenuItem>
</SiteMenuItems>
我的问题是代码只过滤第一级:
<SiteMenuItem text="Admin" roles="Admin">
但我也不知道如何过滤内部SiteMenuItem:
<SiteMenuItem text="User Admin" navigateurl="/Authorized/UserAdmin/Default.aspx" roles="SuperAdmin" />
现在,如果您具有管理员角色,它还会返回“User Admin”项
[更新]
多亏了woodings,我的子节点现在正在通过“IsUserAuthorized”测试
不幸的是,即使测试返回“User Admin”节点的“false”,该节点仍然作为整个XML文档的一部分返回
我希望它能返回这样的结果:
<SiteMenuItems>
<SiteMenuItem text="Home" navigateurl="/Default.aspx" tooltip="Return Home" />
<SiteMenuItem text="Admin" roles="Admin">
<SiteMenuItem text="User Admin" navigateurl="/Authorized/UserAdmin/Default.aspx" roles="SuperAdmin" />
</SiteMenuItem>
</SiteMenuItems>
<SiteMenuItems>
<SiteMenuItem text="Home" navigateurl="/Default.aspx" tooltip="Return Home" />
<SiteMenuItem text="Admin" roles="Admin">
</SiteMenuItem>
</SiteMenuItems>
有什么想法吗
再次感谢 XElement.Elements()只返回该特定元素的直接子元素。改为使用XElement.subjections()
Elements()只返回该特定元素的直接子元素。改为使用XElement.subjections()
我解决了我的问题,甚至取消了
FilterRoles()
方法:
public string GetMenu()
{
XDocument xmlDoc = XDocument.Load(HttpContext.Current.Server.MapPath(WebConfigHelper.GetSiteMenu));
xmlDoc.Descendants().Where(element => !UserHelper.IsUserAuthorized(element.Attribute("roles"))).Remove();
return XsltTransformHelper.ExecuteXslTransformation(xmlDoc.ToString(), HttpContext.Current.Server.MapPath(WebConfigHelper.GetSiteMenuTransform));
}
谢谢大家的帮助 我解决了我的问题,甚至取消了
FilterRoles()
方法:
public string GetMenu()
{
XDocument xmlDoc = XDocument.Load(HttpContext.Current.Server.MapPath(WebConfigHelper.GetSiteMenu));
xmlDoc.Descendants().Where(element => !UserHelper.IsUserAuthorized(element.Attribute("roles"))).Remove();
return XsltTransformHelper.ExecuteXslTransformation(xmlDoc.ToString(), HttpContext.Current.Server.MapPath(WebConfigHelper.GetSiteMenuTransform));
}
谢谢大家的帮助 谢谢,谢谢,谢谢!!!它现在正在测试子项!!但是,子项“User Admin”仍将显示,即使它通过“IsUserAuthorized”方法设置为false。谢谢,谢谢,谢谢!!!它现在正在测试子项!!但是,尽管通过“IsUserAuthorized”方法将子项“User Admin”设置为false,但仍会显示该子项。