根据Google在
Video sitemaps中定义的内容,应该将一些xml标记添加到视频的站点地图中,它应该是这样的:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"> <url> <loc>http://www.example.com/videos/some_video_landing_page.html</loc> <video:video> <video:thumbnail_loc>http://www.example.com/thumbs/123.jpg</video:thumbnail_loc> <video:title>Grilling steaks for summer</video:title> <video:description>Alkis shows you how to get perfectly done steaks every time</video:description> <video:content_loc>http://www.example.com/video123.mp4</video:content_loc> <video:player_loc autoplay="ap=1"> http://www.example.com/videoplayer.mp4?video=123</video:player_loc> <video:duration>600</video:duration> <video:expiration_date>2009-11-05T19:20:30+08:00</video:expiration_date> <video:rating>4.2</video:rating> <video:view_count>12345</video:view_count> <video:publication_date>2007-11-05T19:20:30+08:00</video:publication_date> <video:family_friendly>yes</video:family_friendly> <video:restriction relationship="allow">IE GB US CA</video:restriction> <video:gallery_loc title="Cooking Videos">http://cooking.example.com</video:gallery_loc> <video:price currency="EUR">1.99</video:price> <video:requires_subscription>yes</video:requires_subscription> <video:uploader info="http://www.example.com/users/grillymcgrillerson">GrillyMcGrillerson </video:uploader> <video:live>no</video:live> </video:video>
我想知道如何将这些自定义标签动态添加到我的sitemap.xml中?我使用的是mvcsitemapprovider
好吧,我无法使用mvcsitemapprovider来实现我的目标,但我做了这个临时解决方案,我正在尝试从中创建nuget包或将其作为一个功能添加到mvcsitemapprovider包中,这是我添加到ContentResult的代码在控制器中,当url看起来像这样的“/videoSiteMap.xml”时,我改变了我的routeConfig来调用这个方法:
原文链接:https://www.f2er.com/xml/292426.htmlpublic ContentResult VideoSiteMap() { XmlDocument xmlDoc = new XmlDocument(); using (XmlWriter writer = xmlDoc.CreateNavigator().AppendChild()) { //writer.Formatting = Formatting.Indented; writer.WriteStartDocument(); writer.WriteStartElement("urlset","http://www.sitemaps.org/schemas/sitemap/0.9"); // add namespaces writer.WriteAttributeString("xmlns","video",null,"http://www.google.com/schemas/sitemap-video/1.1"); List<VideoSiteMap> siteMapp = null; siteMapp = ServiceHelper.GetGoogleSiteMap();//I invoked a service //you can use a fake loop instead: for (int i = 0; i < 10; i++) foreach( var content in siteMapp) { writer.WriteStartElement("url"); // required writer.WriteElementString("loc","http://example.com/myplayer.aspx"); writer.WriteStartElement("video",null); // start:optional writer.WriteElementString("video","thumbnail_loc","http://www.example.com/thumbs/123.jpg"); writer.WriteElementString("video","title",""); writer.WriteElementString("video","description","Alkis shows you how to get perfectly done steaks every time"); writer.WriteElementString("video","content_loc","http://www.example.com/video123.mp4"); writer.WriteStartElement("video","player_loc",null); writer.WriteAttributeString("autoplay","ap=1"); writer.WriteString("http://www.example.com/videoplayer.mp4?video=123"); writer.WriteEndElement(); // video:player_loc // end:optional writer.WriteElementString("video","duration","100"); writer.WriteElementString("video","expiration_date","2009-11-05T19:20:30+08:00"); writer.WriteElementString("video","rating","4.2"); writer.WriteElementString("video","view_count","12345"); writer.WriteElementString("video","publication_date","2007-11-05T19:20:30+08:00"); writer.WriteElementString("video","family_friendly","yes"); writer.WriteElementString("video","category","Cooking"); writer.WriteStartElement("video","restriction",null); writer.WriteAttributeString("relationship","allow"); writer.WriteString("IE GB US CA"); writer.WriteEndElement(); writer.WriteStartElement("video","gallery_loc",null); writer.WriteAttributeString("title","Cooking Videos"); writer.WriteString("http://cooking.example.com"); writer.WriteEndElement(); writer.WriteStartElement("video","price",null); writer.WriteAttributeString("currency","EUR"); writer.WriteString("1.99"); writer.WriteEndElement(); writer.WriteElementString("video","requires_subscription","yes"); writer.WriteStartElement("video","uploader",null); writer.WriteAttributeString("info","http://www.example.com/users/grillymcgrillerson"); writer.WriteString("GrillyMcGrillerson"); writer.WriteEndElement(); writer.WriteElementString("video","live","No"); writer.WriteEndElement(); // video:video writer.WriteEndElement(); //url } writer.WriteEndElement(); //urlset writer.WriteEndDocument(); writer.Close(); } var stringWriter = new StringWriter(); var xmlTextWriter = XmlWriter.Create(stringWriter); xmlDoc.WriteTo(xmlTextWriter); xmlTextWriter.Flush(); return Content(stringWriter.GetStringBuilder().ToString().replace("utf-16","utf-8"),"text/xml",Encoding.UTF8); }
我在返回我的xml数据的同时用utf-8替换了utf-16,因为我找不到更简单的方法来更改XmlWriter的结果(默认情况下它总是返回一个utf-16格式)
我希望它可以帮助其他人,如果有人帮助我做一个nuget包或者其他东西,我会很高兴的:D