我正在尝试制作视频网站的视频站点地图。但我正面临一个XMLExecption“''''字符,十六进制值0x3A,不能包含在名称中。”这是因为名称中的冒号(视频:视频)。
XNamespace gs = "http://www.sitemaps.org/schemas/sitemap/0.9";
XDocument doc = new XDocument(
new XElement(gs + "urlset",
(from p in db.Videos
orderby p.video_id descending
select new XElement(gs + "url",
new XElement(gs + "loc", "http://www.example.com/video/" + p.video_id + "-" + p.video_query),
new XElement(gs + "video:video",
new XElement(gs + "video:thumbnail_loc", "http://cdn.example.com/thumb/" + p.video_image)
))).Take(50)));
doc.Save(@"C:\video_sitemap.xml");
请告诉我如何在名称中添加冒号以使用LINQ to SQL生成动态xml站点地图。
谢谢和问候。
更新
此视频XML站点地图应如下所示: Google Video Sitemap
答案 0 :(得分:2)
video
这是命名空间的别名。根据例子:
<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:video>
</url>
</urlset>
因此,您只需要两个XNamespace
值 - 一个用于站点地图命名空间,另一个用于视频命名空间:
XNamespace siteMapNs = "http://www.sitemaps.org/schemas/sitemap/0.9";
XNamespace videoNs = "http://www.google.com/schemas/sitemap-video/1.1";
XDocument doc = new XDocument(
new XElement(siteMapNs + "urlset",
(from p in db.Videos
orderby p.video_id descending
select new XElement(siteMapNs + "url",
new XElement(siteMapNs + "loc",
"http://www.example.com/video/" + p.video_id + "-" + p.video_query),
new XElement(videoNs + "video",
new XElement(videoNs + "thumbnail_loc",
"http://cdn.example.com/thumb/" + p.video_image)
)
)
).Take(50)
)
);
编辑:如果你真的希望这个命名空间使用别名video
,你可以在你的根元素中声明它:
XDocument doc = new XDocument(
new XElement(siteMapNs + "urlset",
new XAttribute(XNamespace.Xmlns + "video", videoNs),
(from p in db.Videos
...
答案 1 :(得分:1)
@Jon Skeet: 您的代码生成了此站点地图
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/video/1-video_query_1</loc>
<video xmlns="http://www.google.com/schemas/sitemap-video/1.1">
<thumbnail_loc>http://cdn.example.com/thumb/7665518872558731.jpg</thumbnail_loc>
</video>
</url>
<url>
<loc>http://www.example.com/video/2-video_query_2</loc>
<video xmlns="http://www.google.com/schemas/sitemap-video/1.1">
<thumbnail_loc>http://cdn.jigers.com/thumb/6921835997871337.jpg</thumbnail_loc>
</video>
</url>
但它应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<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/video/1-video_query_1</loc>
<video:video>
<video:thumbnail_loc>http://cdn.example.com/thumb/7665518872558731.jpg</video:thumbnail_loc>
</video:video>
</url>
<url>
<loc>http://www.example.com/video/2-video_query_2</loc>
<video:video>
<video:thumbnail_loc>http://cdn.jigers.com/thumb/6921835997871337.jpg</video:thumbnail_loc>
</video:video>
</url>
</urlset>
视频:视频有冒号,应该有xmlns:video="http://www.google.com/schemas/sitemap-video/1.1
urlset中的命名空间..
请看一下
答案 2 :(得分:0)
您似乎将别名与命名空间混淆。
找出&#39;视频&#39;的名称空间。为它创建一个XNamespace
(就像你在gs中所做的那样)。
然后执行videoNamespace + "thumbnail_loc"
。