Да, это абсолютно правильный подход. Конечно, при условии, что вы используете стандартный протокол карты сайта , вам необходимо:
- Establi sh XML объявление (например,
<?xml version="1.0" encoding="UTF-8"?>
) - Начните с элемента
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" />
Так, например, если вы хотите собрать XML, используя XDocument
, вы можете начать с чего-то вроде:
private static readonly XNamespace _sitemapNamespace = "http://www.sitemaps.org/schemas/sitemap/0.9";
private static readonly XNamespace _pagemapNamespace = "http://www.google.com/schemas/sitemap-pagemap/1.0";
public ActionResult Sitemap() {
var xml = new XDocument(
new XDeclaration("1.0", "utf-8", String.Empty),
new XElement(_sitemapNamespace + "urlset",
//Your logic here
)
return Content(sitemap.ToString(), "text/xml");
);
}
Тем не менее, с этим кодом вы столкнетесь с проблемой, при которой ваше объявление XML не будет возвращено вместе с вашим XML, поскольку XDocument.ToString()
возвращает только фрагмент XML. Чтобы это исправить, вам нужно обернуть XDocument
, например, в StringWriter
:
var sitemapFile = new StringBuilder();
using (var writer = new StringWriter(sitemapFile)) {
sitemap.Save(writer);
}
return Content(sitemapFile.ToString(), "text/xml");
Примечание: Существуют и другие подходы для динамической генерации XML. Если вы используете XmlWriter
или XmlDocument
, ваш код будет выглядеть совсем иначе. Суть в том, чтобы помочь заполнить то, как может выглядеть реальная реализация , а не предписывать эксклюзивный подход.
Существуют ли конкретные проблемы c, с которыми вы работаете с вашей попыткой? Если это так, я могу дать более подробное руководство c. Но подход, который вы используете, является правильным.