asp.net C# 生成sitemap.xml 问题?

作者&投稿:郅翁 (若有异议请与网页底部的电邮联系)
c# 在xml 跟节点下添加子节点~

这个是修改后的...
private void AddXml(string url, string title, string description, string target, int btn)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("../../XMLFile.xml"); //加载xml文件
XmlNode rootXml = xmlDoc.SelectSingleNode("siteMapPath"); //查询XML文件的根节点("siteMapPath")
XmlNode xn = rootXml.SelectSingleNode("siteMap"); //查询节点("siteMap")
if (btn == 1)
{
XmlElement xe = xmlDoc.CreateElement("siteMap"); //创建节点("siteMap")
//设置新建节点("siteMap")的相关属性
xe.SetAttribute("url", url);
xe.SetAttribute("title", title);
xe.SetAttribute("description", description);
xe.SetAttribute("target", target);
if (xn.Attributes["title"].Value.Equals("教学管理"))
{
rootXml.InsertAfter(xe, xn); //将新建的节点xe放置于xn节点后
}
}
else
{
XmlNodeList xnl = xn.SelectNodes("siteMapNode"); //获取所有节点为"siteMapNode"的节点
foreach (XmlNode xnItem in xnl)
{
XmlElement xe = (XmlElement)xnItem; //将子节点类型转换为XmlElement类型
if (xe.GetAttribute("title").Equals("院系介绍")) //判断条件
{
XmlElement newXE = xmlDoc.CreateElement("siteMapChildNode");
newXE.SetAttribute("url", url);
newXE.SetAttribute("title", title);
newXE.SetAttribute("description", description);
newXE.SetAttribute("target", target);
xnItem.AppendChild(newXE);
}
}
}
xmlDoc.Save("../../XMLFile.xml");
}

private void button1_Click(object sender, EventArgs e)
{
this.AddXml("", "实践教学", "", "_self", 1);
MessageBox.Show("添加实践教学成功...");
}

private void button2_Click(object sender, EventArgs e)
{
this.AddXml("", "工商学院", "", "_self", 2);
MessageBox.Show("添加工商学院成功...");
}
应该就可以了, 你试看看吧.
呵呵O(∩_∩)O~ 赏分就算了, 回答你这个我也学到了东西. 呵呵













给你一点参考吧~~这是我以前写的一个动态生成站点地图的~~一个简单实例方法~~~~~~你可以看一下~~~注释很清楚
首先前台将Web.SitMap的物理路径传入CreatSiteMap(string path)方法就可以了~[string path=Server.MapPath("~/Web.sitemap");]
其次关于数据库这边我就是通过GetList(string strWhere)提供的DataTable方法来实现的当然这里根据自己需要来设计数据库不过至少要提供Web.SitMap的三个基本属性~~~当然需要更多的自己可以在ChildNodesCreate(ref XmlDocument doc,ref XmlElement t,DataRow row)方法内添加就行了注释的很清楚~~
/// <summary>
/// 查询多条数据
/// </summary>
/// <param name="strWhere">要查询的条件</param>
/// <returns>返回一个DataTbale查询集合</returns>
public DataTable GetList(string strWhere)
{
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from company_title ");
if (strWhere.Trim() != "")
{
strSql.Append(" where " + strWhere);
}
return DBLink.ToDataTable(DBLink.ExecuteReader(strSql.ToString()));
}

/// <summary>
/// 生成Web.Sitemap站点地图的的方法
/// </summary>
/// <param name="path">站点地图所在物理路径</param>
/// <returns>生成是否成功</returns>
public bool CreatSiteMap(string path)
{
AddWebSiteMap(path);//创建XML
XmlDocument doc = new XmlDocument();
doc.Load(path);//获取XML对象
XmlNode node = doc.DocumentElement;//创建根节点
//创建根节点的一个属性
XmlAttribute mains = doc.CreateAttribute("xmlns");
mains.Value = "http://schemas.microsoft.com/AspNet/SiteMap-File-1.0";
node.Attributes.Append(mains);//将属性添加到根节点
//查询根节点(首页)
string strWhere = " titleid=0 and titlevisible=0 and titletype=0 ";
DataTable table=GetList(strWhere);
/////////////////

for (int i = 0; i < table.Rows.Count; i++)
{
//创建一个元素
XmlElement t = doc.CreateElement("siteMapNode");
//添加这个元素的属性和子节点
ChildNodesCreate(ref doc,ref t,table.Rows[i]);
node.AppendChild(t);//将这个子节点添加到根节点内
}
//////////////////

doc.Save(path);
return true;
}

/// <summary>
/// 递归创建节点及其子节点
/// </summary>
/// <param name="doc">XML对象</param>
/// <param name="t">子节点</param>
/// <param name="row">数据库中取出的要添加的节点对象</param>
/// <returns>是否添加成功</returns>
public bool ChildNodesCreate(ref XmlDocument doc,ref XmlElement t,DataRow row)
{

//添加Web.SiteMap的三个基本属性
XmlAttribute nodvalue = doc.CreateAttribute("url");
nodvalue.Value = row["TitleUrl"].ToString();
t.Attributes.Append(nodvalue);

nodvalue = doc.CreateAttribute("title");
nodvalue.Value = row["TitleName"].ToString();
t.Attributes.Append(nodvalue);

nodvalue = doc.CreateAttribute("description");
nodvalue.Value = row["TitleName"].ToString();
t.Attributes.Append(nodvalue);

//取出该节点的所有子节点
string strWhere = " TitleFID=" + row["TitleID"].ToString() + " and titlevisible=0 and TitleID<>0";
DataTable table = GetList(strWhere);
//进行判断是否存在子节点并且进行循环递归调用
for (int i = 0;i<table.Rows.Count ;i++ )
{
XmlElement s = doc.CreateElement("siteMapNode");
ChildNodesCreate(ref doc, ref s, table.Rows[i]);
t.AppendChild(s);
}

return true;
}

/// <summary>
/// 创建一个WEB.SiteMap
/// </summary>
public void AddWebSiteMap(string path)
{
XmlWriter xw = XmlWriter.Create(path);
xw.WriteComment("动态生成的站点地图");
xw.WriteStartElement("siteMap");
xw.WriteEndElement();
xw.Close();
}
上变已经有了给以个节点附加属性~~以及添加子节点问题~~~~呵呵~~其实就是简单的DOM解析了~~


凌海市18620473735: asp.net C# 网站开发 怎么为每个用户动态生成一个固定url -
佼废康锐: 可以通过域名转换的方式,也就是用用户的一个标识来作为页面,如用户的ID为999,则页面为user_999.html.用户访问这个页面时实际上是统一访问同一个页面,而不是通过页面后面带上参数的方式来实现区分用户.需要在WEB.CONFIG中配置页面的通配页面

凌海市18620473735: ASP.NET(C#)中,生成网站是何意,生成网站后,与不生成网站有何区别. -
佼废康锐: 你理解错了.生成网站不是在源码的基础上新生成出一份网站来,而发布网站才是这个意思.生成网站是编译网站中代码的意思.例如:现在打开网站显示的是"abc", 然后你在代码中改为"abcdef"并保存.然后再打开网站还是显示"abc". 然后你生成网站.这时再打开网站显示的就是"abcdef"了 而发布网站是在源码的基础上新生成出一份网站来,可以给iis等服务器挂上网站.供给局域网或internet网用户访问.

凌海市18620473735: ASP.NET(C#)如何创建站点地图? -
佼废康锐: 在左边的工具栏的导航有个SiteMapPath,拖个放在你要放的界面上,然后在新建一个XML文件.剩下的你看http://book.51cto.com/art/200901/106543.htm,太多了,懒得写了

凌海市18620473735: ASP.NET(C#)怎么获得当前域名? -
佼废康锐: HttpContext.Current.Request.Url.Host.ToString()

凌海市18620473735: 如何用.net C# 做网站 -
佼废康锐: 也可以不用在DW写页面,直接在VS写也可以,写页面要学CSS 写好的前台的页面就可以写.net后台代码,还有这些不是一下就可以说明白给你听,只你自己在学习中找出一个方法来,总之就是多做,多学,多看别人写的代码这样就好快就上手``

凌海市18620473735: 如何在服务器中发布asp.net(c#)的网站 -
佼废康锐: 首先,打开Visual Studio,右击已经创作完成的网站,选择“发布”,在发布方法中选择“文件系统”,目标位置中选择或新建一个文件夹来保存发布的网页文件,发布完成后把整个文件夹复制到服务器中.服务器要先配置好与开发的环境相匹配的.net环境,然后配置IIS,再然后就可以测试网站了.

凌海市18620473735: 怎样利用visual studio 2010 建立一个网站~~ asp.net(c#) -
佼废康锐: 打开VS2010,左上角“文件”-》“新建”-》“项目”-》选择Visual C#下面的-》“Web”就可以创建一个网站了、不过建议创建网站前先创建一个解决方案

凌海市18620473735: 如何用ASP.net+c#制作网页模板 -
佼废康锐: 在ASP.NET里没这个概念 在.NET里,风格使用的主题来实现的,所有的CSS都放在主题里面 masterPage是母版,和模板的概念差不多,什么固定的东西都放在里面

凌海市18620473735: 我在ASP.NET上用C#做一个网站,用的是visual studio2010旗舰版 -
佼废康锐: 为了是网站的布局风格一致,经常会用到母版页,也就是site.master,default.aspx是放在母版页 site.maste中的内容窗体,当用户访问default.aspx页面时,也会看到site.master,但是有一个前提是你设置这个default.aspx的母版页是site.maste

凌海市18620473735: 急!网站制作高手请进!我想用ASP.NET平台+C#做一个网站,其中一个功能不知道怎么实现? -
佼废康锐: 你可以在数据库中建一个text类型的字段,然后让他存菜单或者是真个页面的html进去,你在需要的地方直接读出来就可以了~ 不知道你说的是不是这个意思~

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网