如何使用 mvcsitemapprovider 将自定义 xml 标签添加到 sitemap.xml?

2024-01-05

基于 Google 的定义视频站点地图 https://developers.google.com/webmasters/videosearch/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 中?我正在使用mvc站点地图提供者 https://github.com/maartenba/MvcSiteMapProvider


好吧,我还无法使用 mvcsitemapprovider 来实现我的目标,但我做了这个临时解决方案,我正在尝试从中制作 nuget 包或将其作为功能添加到 mvcsitemapprovider 包中,这是我添加到 ContentResult 的代码在控制器中,当 url 看起来像这样“/videoSiteMap.xml”时,我更改了我的routeConfig以调用此方法:

public 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", "video", null);

                // start:optional
                writer.WriteElementString("video", "thumbnail_loc", null, "http://www.example.com/thumbs/123.jpg");
                writer.WriteElementString("video", "title", null, "");
                writer.WriteElementString("video", "description", null, "Alkis shows you how to get perfectly done steaks every time");
                writer.WriteElementString("video", "content_loc", null, "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", null, "100");
                writer.WriteElementString("video", "expiration_date", null, "2009-11-05T19:20:30+08:00");
                writer.WriteElementString("video", "rating", null, "4.2");
                writer.WriteElementString("video", "view_count", null, "12345");
                writer.WriteElementString("video", "publication_date", null, "2007-11-05T19:20:30+08:00");
                writer.WriteElementString("video", "family_friendly", null, "yes");
                writer.WriteElementString("video", "category", null, "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", null, "yes");

                writer.WriteStartElement("video", "uploader", null);
                writer.WriteAttributeString("info", "http://www.example.com/users/grillymcgrillerson");
                writer.WriteString("GrillyMcGrillerson");
                writer.WriteEndElement();

                writer.WriteElementString("video", "live", null, "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-16 替换为 utf-8,因为我找不到更简单的方法来更改 XmlWriter 的结果(默认情况下它始终返回 utf-16 格式)

我希望它对其他人有帮助,如果有人帮助我将其制作成 nuget 包或其他东西,我会很高兴:D

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 mvcsitemapprovider 将自定义 xml 标签添加到 sitemap.xml? 的相关文章

随机推荐

  • 环绕文本的边界框

    我想在 QML 周围画一个矩形Text使用自动换行的对象 TextMetrics http doc qt io qt 5 qml qtquick textmetrics html看起来这很理想 但它似乎不支持换行文本 我如何测量文本在文本中
  • opengl 和 GLSL 有什么区别?

    我最近开始使用 openGL 进行编程 我已经完成了创建基本基元的代码 并在 webGL 中使用了着色器 我已经在谷歌上广泛搜索了这个主题 但对我来说仍然不太清楚 基本上 这就是我想知道的 是否有任何事情可以在 GLSL 中完成而在普通 o
  • 一个浮点数可以在给定范围内表示多少个值?

    直觉告诉我 由于 32 位可以表示固定数量的不同值 因此浮点可以表示任何给定范围的固定数量的值 这是真的 转换处理方式能够表示的值的数量是否有任何损失 Say I pick a number in the range 1030 1035 O
  • 类型“AngularFireAuth”上不存在属性“auth”

    使用 AngularFire 时出现此错误 检查了我的进口 它们似乎是正确的 我尝试重新安装 AngularFire 但它仍然抛出此错误 角火有问题吗 import Injectable NgZone from angular core i
  • C++ 编译时检查是否可以使用某种类型的参数调用重载函数

    考虑一个重载函数 void f int void f long void f double void f MyClass 以及模板类中参数类型未知的方法 template
  • 如何防止 IE 缓存导致重复的 Ajax 请求?

    我们使用Dynamic Sc ript Tag配合JsonP机制来实现跨域Ajax调用 前端小部件非常简单 它只是调用搜索 Web 服务 传递用户提供的搜索条件并接收和动态呈现结果 Note 对于那些不熟悉使用 JsonP 方法的动态脚本标
  • 从 Android 应用程序发送 POST 请求到 Django 视图

    我正在尝试从 Android 设备读取 QRCode 并将提取的 ID 发送到使用 Django 构建的 Web 服务器 我按照教程进行操作here http hmkcode com android send json data to se
  • css中的字符串连接

    我想在css中实现以下目标 我如何以跨浏览器的方式做到这一点 url img icons attr type 10 png 我认为你不能 在里面content属性你可以通过用空格分隔来 连接 但在其他地方我认为没有这样的功能 这是一种耻辱
  • 无法将文件移动到已安装的网络共享文件夹

    我正在尝试将文件上传到办公网络共享文件夹 我有权让我的用户帐户访问共享文件夹 我使用 UNC 路径直接通过 move upload file 函数上传文件 但它不起作用 我收到此错误 警告 move uploaded file 17 105
  • 从多列中选择值到单列中

    我在数据库中有一个表 其中有 9 列 其中包含相同类型的数据 这些值是允许为空 我需要将每个非空值选择到一列值中 这些值不关心它们源自的行的标识 因此 对于看起来像这样的表 Id I1 I2 I3 1 x1 x2 x7 2 x3 null
  • AFNetworking 2 - 获取错误 json 正文 [重复]

    这个问题在这里已经有答案了 我用的是最新的AF网络对于我的应用程序 它与 REST API 服务器通信 当我得到一些500JSON 主体出现错误 如下所示 message my error message 我无法从以下位置检索此消息NSEr
  • 将导航抽屉添加到现有活动

    我正在编写一个应用程序 它已经包含很多代码 我决定要向主活动工具栏添加一个导航抽屉 但我不知道如何在不创建新的导航抽屉项目和复制的情况下做到这一点我的整个项目看起来工作量很大 是否有教程可以向现有项目添加导航抽屉 创建布局布局左菜单 xml
  • 将 Json 反序列化为 C# bool

    我需要帮助解决一个非常简单的问题 如何在不创建包装根对象的情况下将下面的 json 反序列化为 C bool 谢谢 f valid false 0 如果您正在使用Json Net http james newtonking com json
  • 我们如何才能使 __future__ 进口全球化?

    规格 Python 2 7 我正在开发一个具有多个模块的项目 我想激活所有模块中 future 模块的一些功能 我想在一个模块上导入我需要的所有功能 然后将该单个模块导入到每个其他模块 并使这些功能在所有模块中处于活动状态 或者达到这种效果
  • 为什么 W3C 建议将输入元素包装在

    标记中?

    我在网上看到了很多示例 其中表单的布局如下
  • android 设计注意事项:AsyncTask 与 Service(IntentService?)

    我正在设计一个 Android 应用程序 需要执行以下步骤 用户按下按钮或以其他方式指示 同步数据 同步过程将使用 REST Web 服务将数据移入和移出服务器 数据将存储在本地 SQLite 数据库中 同步过程应向 UI 提供状态更新 消
  • 如何在Python(Windows)中获取Spotify当前正在播放的歌曲?

    我想在 16x2 LCD 上显示 Spotify 中当前播放的歌曲 我正在考虑将 LCD 与我的 Arduino 连接起来 然后制作一个 Python 脚本 将 Spotify 当前播放的歌曲发送到 Arduino 言归正传 我正在寻找一种
  • MyISAM 上的全文索引,单列索引与多列索引

    我有一个非常大的表 4M 行 磁盘空间超过 40Gb 14Gb 数据和 28Gb 索引 我需要对组合和分离的多个字段进行全文搜索 这意味着我需要能够对单列和多列一起进行全文搜索 如下所示 用于组合搜索 SELECT column a col
  • 在 Python 中加速 Metropolis-Hastings 算法

    我有一些使用 MCMC 对后验分布进行采样的代码 特别是黑斯廷斯大都会 https en wikipedia org wiki Metropolis E2 80 93Hastings algorithm 我使用 scipy 生成随机样本 i
  • 如何使用 mvcsitemapprovider 将自定义 xml 标签添加到 sitemap.xml?

    基于 Google 的定义视频站点地图 https developers google com webmasters videosearch sitemaps 有一些xml标签应该添加到视频的站点地图中 应该是这样的