Pregunta

Estoy intentando crear un mapa del sitio en un proyecto ASP.NET MVC.

Este código en mi controlador de Nodo ...

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

(aquí hay una imagen porque Stack Overflow no colorea bien el código VB)

XML en línea de Visual Basic

... produce este error:

  

Esta operación crearía un   documento estructurado incorrectamente.

No sabría dónde agregar ese contenido.

¿Cómo le digo que inserte ese bit de XML en el <urlset>?

¿Fue útil?

Solución

Debe agregarlo al elemento de nivel superior en el documento (la raíz):

map.Root.Add(...)

Otros consejos

¿Por qué no llenarlo completamente con otro agujero 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top