Pergunta

Eu estou tentando criar um mapa do site em um projeto ASP.NET MVC.

Este código no meu nó do controlador ...

Function Sitemap() As ContentResult
    Dim db As New EfrDotOrgEntities
    Dim Nodes = db.Node.ToList
    Dim RequestUrl As Uri = Url.RequestContext.HttpContext.Request.Url
    Dim AbsoluteRoot As String = String.Format("{0}://{1}", RequestUrl.Scheme, RequestUrl.Authority)

    Dim map As XDocument = <?xml version="1.0" encoding="UTF-8"?>
                           <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
                           </urlset>
    For Each n As Node In Nodes
        map.Add(<url>
                    <loc><%= AbsoluteRoot + Url.RouteUrl("IdOnly", New With {.id = n.Id}) %></loc>
                </url>)
    Next
    Return Content(map.ToString, "text/xml", Encoding.UTF8)
End Function

(aqui está uma imagem por causa de estouro de pilha não cor código VB bem)

Visual XML em linha Basic

... produz este erro:

Esta operação criaria um estruturada de forma incorrecta do documento.

Não saberia , onde para adicionar esse conteúdo.

Como posso dizer-lhe para inserir esse pouco de XML para o <urlset>?

Foi útil?

Solução

Você precisa adicioná-lo ao elemento de nível superior no documento (a raiz):

map.Root.Add(...)

Outras dicas

Por que não preenchê-lo completamente com outro buraco literal xml?

Dim map As XDocument = <?xml version="1.0" encoding="UTF-8"?>
                       <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
                           <%= From n In Nodes.Cast(Of Node)() _
                               Select <url>
                                          <loc><%= AbsoluteRoot + Url.RouteUrl("IdOnly", New With {.id = n.Id}) %></loc>
                                      </url> %>
                       </urlset>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top