使用xmlwriter在web.sitemap文件中编写xml

时间:2014-01-18 00:15:35

标签: c# sitemap

我将web.sitemap文件定义为

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode url="" title=""  description="">

    </siteMapNode>
</siteMap>

我正在尝试使用以下代码编写xml

var writer = new XmlTextWriter("/Web.sitemap", null);

var xmlElements = new XElement("siteMapNode",
    new XAttribute("title", "Movies"),
    movies.Select(i => new XElement
        ("siteMapNode",
        new XAttribute("title", i.MovieName),
        new XAttribute("url", string.Format("/Movie/{0}.html", i.MovieName))
        )));


writer.WriteString(xmlElements.ToString());

但文件仍然像以前一样,上面的代码没有写任何东西。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

1)首先,由于XmlTextWriter是一次性的,因此Dispose是好的(例如using语句)。如果将其添加到代码中,则会写入文件,但是......

2)WriteStringXmlTextWriter的组合显然会产生转义标记

&lt;siteMapNode title="Movies"&gt;
  &lt;siteMapNode title="Rambo" url="/Movie/Rambo.html" /&gt;
&lt;/siteMapNode&gt;

所以我建议将writer.WriteString(xmlElements.ToString());更改为xmlElements.Save(writer);。但...

3)您没有正确格式化XML,因为root是siteMapNode并且应该是siteMap

最终代码:

List<Movie> movies = new List<Movie>() { new Movie() { MovieName = "Rambo" } };
using (var writer = new XmlTextWriter("Web.sitemap", null))
{
    var xmlElements = new XElement("siteMap",
        new XAttribute("title", "Movies"),
        movies.Select(i => new XElement
            ("siteMapNode",
            new XAttribute("title", i.MovieName),
            new XAttribute("url", string.Format("/Movie/{0}.html", i.MovieName))
            )));
    xmlElements.Save(writer);
}