¿Cómo inserto un poco de XML en un XDocument usando Visual Basic?
-
03-07-2019 - |
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)
... 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>
?
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