Как удалить xmlns из элементов при генерации XML с помощью LINQ?

#c# #linq

#c# #linq

Вопрос:

Я пытаюсь использовать LINQ для создания моей карты сайта. Каждый URL-адрес в карте сайта генерируется с помощью следующего кода C #:

 XElement locElement = new XElement("loc", location);
XElement lastmodElement = new XElement("lastmod", modifiedDate.ToString("yyyy-MM-dd"));
XElement changefreqElement = new XElement("changefreq", changeFrequency);

XElement urlElement = new XElement("url");
urlElement.Add(locElement);
urlElement.Add(lastmodElement);
urlElement.Add(changefreqElement);
  

Когда я создаю свою карту сайта, я получаю XML, который выглядит следующим образом:

 <?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url xmlns="">
    <loc>http://www.mydomain.com/default.aspx</loc>
    <lastmod>2011-05-20</lastmod>
    <changefreq>never</changefreq>
  </url>
</urlset>
  

Моя проблема в том, как мне удалить «xmlns =»»» из элемента url? Все правильно, за исключением этого.

Спасибо за вашу помощь!

Ответ №1:

Похоже, вы хотите, чтобы url элемент (и все подэлементы) были в пространстве имен sitemap, поэтому вы хотите:

 XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";

XElement locElement = new XElement(ns   "loc", location);
XElement lastmodElement = new XElement(ns   "lastmod", modifiedDate.ToString("yyyy-MM-dd"));
XElement changefreqElement = new XElement(ns   "changefreq", changeFrequency);

XElement urlElement = new XElement(ns   "url");
urlElement.Add(locElement);
urlElement.Add(lastmodElement);
urlElement.Add(changefreqElement);
  

или более традиционно для LINQ в XML:

 XNamespace ns = "http://www.sitemaps.org/schemas/sitemap/0.9";

XElement urlElement = new XElement(ns   "url",
    new XElement(ns   "loc", location);
    new XElement(ns   "lastmod", modifiedDate.ToString("yyyy-MM-dd"),
    new XElement(ns   "changefreq", changeFrequency));