I have created a simple sample, where the roles for a Menu in SiteMap is updated using XmlDocument.
SiteMap before update
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="" title="Home" description="" roles="*">
<siteMapNode url="~/Home.aspx" title="Home" description="Home Page" roles="*" />
<siteMapNode url="javascript:;" title="Admin" description="Admin Page" roles="Administrator">
<siteMapNode url="~/Admin/Users.aspx" title="Users" description="Users Page">
</siteMapNode>
<siteMapNode url="~/Admin/Reports.aspx" title="Reports" description="Reports Page">
</siteMapNode>
</siteMapNode>
<siteMapNode url="~/Contact.aspx" title="Contact" description="Contact Us Page" roles="*" />
</siteMapNode>
</siteMap>
Namespaces
using System.Xml;
Code
protected void Page_Load(object sender, EventArgs e)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath("~/Web.sitemap"));
XmlNodeList elementList = xmlDoc.GetElementsByTagName("siteMapNode");
foreach (XmlNode node in elementList)
{
if (node.Attributes["description"].Value == "Admin Page")
{
if (node.Attributes["roles"] == null)
{
//Create Attribute.
XmlAttribute roles = xmlDoc.CreateAttribute("roles");
node.Attributes.Append(roles);
}
//Set roles value here
node.Attributes["roles"].Value = "Administrator,User";
}
}
xmlDoc.Save(Server.MapPath("~/Web.sitemap"));
}
SiteMap after update
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="" title="Home" description="" roles="*">
<siteMapNode url="~/Home.aspx" title="Home" description="Home Page" roles="*" />
<siteMapNode url="javascript:;" title="Admin" description="Admin Page" roles="Administrator,User">
<siteMapNode url="~/Admin/Users.aspx" title="Users" description="Users Page">
</siteMapNode>
<siteMapNode url="~/Admin/Reports.aspx" title="Reports" description="Reports Page">
</siteMapNode>
</siteMapNode>
<siteMapNode url="~/Contact.aspx" title="Contact" description="Contact Us Page" roles="*" />
</siteMapNode>
</siteMap>