2014-01-18 3 views
1

У меня есть определенный Web.sitemap файл взапись XML в Web.sitemap файл с помощью XmlWriter

<?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

Есть некоторые проблемы с вашим кодом:

1) Прежде всего, как XmlTextWriter является одноразовым, это хорошо Dispose это (например, с using заявления). Если добавить его в свой код, файл будет записан, но ...

2) Сочетание WriteString и XmlTextWriter по-видимому, производит сбежавших теги

&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 правильно, потому что корень 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); 
} 
+0

думать, как дать 100 очков за это. Хорошее объяснение Чувак –

Смежные вопросы