【问题标题】:Generating video sitemap not working quite as expected生成视频站点地图无法正常工作
【发布时间】:2018-07-27 02:10:49
【问题描述】:

好的,所以我在这里尝试了很多东西,但无法为元素字符串获得正确的输出。

这是我想要的结果:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">

这是我能得到的最接近的:

<urlset xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" />

所以属性字符串是回到前面的(顺序错误)。

这是我正在使用的代码:

writer.WriteStartDocument();
writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
writer.WriteAttributeString("xmlns", "video", null, "http://www.google.com/schemas/sitemap-video/1.1");

此外,我尝试使用来自this example 的代码,但它给了我一个错误:

writer.WriteStartElement("urlset");
writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
writer.WriteAttributeString("xmlns", "video", null, "http://www.google.com/schemas/sitemap-video/1.1");

这是我得到的错误:

前缀 '' 不能在同一个起始元素标记中从 '' 重新定义为 'http://www.sitemaps.org/schemas/sitemap/0.9'。

我知道我在这里遗漏了一些东西,只是不确定是什么,我也浏览了谷歌,但找不到任何有用的东西。 我也试过改变函数变量的顺序,只是不能让它正常工作。 有谁知道发生了什么? 干杯

【问题讨论】:

    标签: c# xml-sitemap


    【解决方案1】:

    好吧,想通了:

    writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
    writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
    writer.WriteAttributeString("xmlns", "video", null, "http://www.google.com/schemas/sitemap-video/1.1");
    

    将输出:

    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
    

    这是输出视频站点地图的完整代码,希望对某人有所帮助:

    writer.WriteStartDocument();
    writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
    writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
    writer.WriteAttributeString("xmlns", "video", null, "http://www.google.com/schemas/sitemap-video/1.1");
    
    writer.WriteStartElement("url");
    writer.WriteElementString("loc", "https://youtube.com");
    writer.WriteStartElement("video", "video", "http://www.google.com/schemas/sitemap-video/1.1");
    writer.WriteElementString("video", "thumbnail_loc", null, "https://company.com/image-thumb.jpeg");
    writer.WriteElementString("video", "title", null, "this is the video title");
    writer.WriteElementString("video", "description", null, "this is a video description");
    writer.WriteElementString("video", "content_loc", null, "https://company.com/cool-product");
    writer.WriteElementString("video", "family_friendly", null, "yes");
    /* Price */
    writer.WriteStartElement("video", "price", "http://www.google.com/schemas/sitemap-video/1.1");
    writer.WriteAttributeString("currency", "AUD");
    writer.WriteString("100.00");
    writer.WriteEndElement();//video:uploader
    /* Price */
    writer.WriteElementString("video", "requires_subscription", null, "no");
    writer.WriteStartElement("video", "uploader", "http://www.google.com/schemas/sitemap-video/1.1");
    writer.WriteAttributeString("info", "https://company.com");
    writer.WriteString("My Company");
    writer.WriteEndElement();//video:uploader
    writer.WriteElementString("video", "live", null, "yes");
    writer.WriteEndElement();//video:video
    writer.WriteEndElement();//url
    
    writer.WriteEndElement();// urlset
    writer.WriteEndDocument();
    

    更新

    我修改了代码,因为价格元素需要货币属性。它在 /* 价格 */ cmets 之间

    【讨论】:

      猜你喜欢
      • 2014-06-11
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多