Umbraco 站点地图 - 错误 CS1525:无效的表达式术语'<'



Umbraco新手在这里。我按照下面的文档在Umbraco 8.1中创建一个站点地图:

https://our.umbraco.com/documentation/tutorials/Creating-an-XML-Site-Map/

一切似乎都很好,但当我试图把我得到的错误:错误CS1525:无效的表达式术语'<'

它似乎不喜欢从URL开始的HTML标签-我已经尝试了HTML . raw()的一些变体,但它似乎不起作用。谢谢你的帮助。

@{
void RenderSiteMapUrlEntry(IPublishedContent node)
{
var changeFreq = node.Value("searchEngineChangeFrequency", fallback: Fallback.To(Fallback.Ancestors, Fallback.DefaultValue), defaultValue: "monthly");
// with the relative priority, this is a per page setting only, so we're not using recursion, so we won't set Fallback.ToAncestors here and we'll default to 0.5 if no value is set
var priority = node.HasValue("searchEngineRelativePriority") ? node.Value("searchEngineRelativePriority") : "0.5";
<url>
<loc>@node.Url(mode: UrlMode.Absolute)</loc>
<lastmod>@(string.Format("{0:s}+00:00", node.UpdateDate))</lastmod>
<changefreq>@changeFreq</changefreq>
<priority>@priority</priority>
</url>
}

不确定剩下的代码看起来像什么,但从过去的经验来看,在XML模式中几乎有一次不喜欢空间,所以当我这样做时,这里显示https://noarlungaunited.com.au/sitemap使用非常类似的代码,首先将所有内容包装在元素中,并使用一个帮助器来获取home下的子元素和一个函数来生成url,请参阅我的完整代码在这里。

@inherits UmbracoTemplatePage
@using umbraco.MacroEngines;
@{
Response.ContentType = "text/xml";
var homeNode = Umbraco.TypedContentAtRoot().FirstOrDefault(x => x.ContentType.Alias == "HomePage");
if (homeNode != null && homeNode.TemplateId > 0)
{
var homepage = new DynamicNode(homeNode.Id);
<text><?xml version='1.0' encoding='UTF-8' ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemalocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url>
<loc>@GetUrlWithDomainPrefix(homeNode.Url)</loc>
<lastmod>@(string.Format("{0:s}+00:00", homeNode.UpdateDate))</lastmod>
@if (homeNode.GetProperty("sEOSitemapFrequency").HasValue)
{
<changefreq>@homeNode.GetPropertyValue("sEOSitemapFrequency")</changefreq>
}
@if (homeNode.GetProperty("sEOSitemapPriority").HasValue)
{
<priority>@homepage.GetPropertyValue("sEOSitemapPriority")</priority>
}
</url>
@ListChildNodes(homepage)
</urlset>
</text>
}
}
@helper ListChildNodes(DynamicNode startNode)
{
const int maxLevelForSiteMap = 100;

foreach (DynamicNode node in startNode.ChildrenAsList.Where(x => x.HasAccess && !(x.IsProtected)))
{
if (node.template > 0)
{
<url>
<loc>@GetUrlWithDomainPrefix(node.Url)</loc>
<lastmod>@(string.Format("{0:s}+00:00", node.UpdateDate))</lastmod>
@if (!string.IsNullOrEmpty(node.GetProperty("sEOSitemapFrequency").Value))
{
<changefreq>@node.GetPropertyValue("sEOSitemapFrequency")</changefreq>
}
@if (!string.IsNullOrEmpty(node.GetProperty("sEOSitemapPriority").Value))
{
<priority>@node.GetPropertyValue("sEOSitemapPriority")</priority>
}
</url>
}
if (node.Level <= maxLevelForSiteMap && node.ChildrenAsList.Count() > 0)
{
@ListChildNodes(node)
}
}
}
@functions{
private static string GetUrlWithDomainPrefix(string url)
{
if (url.StartsWith("/"))
url = url.Substring(1);
var domainPrefix = string.Format("http://{0}/", HttpContext.Current.Request.ServerVariables["HTTP_HOST"]);
if (url.StartsWith(domainPrefix))
return url;
else
return domainPrefix + url;
}
}

已解析。我使用的是Umbraco版本9的代码;10 -我使用8,所以这个工作:

https://our.umbraco.com/Documentation/Tutorials/Creating-an-XML-Site-Map/index-v8

最新更新