【发布时间】:2021-03-17 20:13:32
【问题描述】:
我想从 SQL Server 中生成站点地图,并使用以下产品表将其保存到我的系统驱动器:
样本数据
| loc | image | caption | changefreq | priority |
|---|---|---|---|---|
| https://example.com/product1 | https://example.com/asset/img1.jpg | title1 | 10 | 0.1 |
| https://example.com/product2 | https://example.com/asset/img2.jpg | title2 | 5 | 0 |
我尝试使用 FOR XML PATH 查询,但它没有给我正确的结果:
DECLARE @xml XML = (SELECT
(SELECT
'' AS "data()"
FOR XML PATH ('loc'), TYPE),
(SELECT
'' AS "data()"
FOR XML PATH ('changefreq'), TYPE),
(SELECT
'' AS "data()"
FOR XML PATH ('priority'), TYPE),
'' AS 'Name!1!ELEMENT'
FROM dbo.product o
FOR XML PATH ('url'), ROOT('dummyTag'), TYPE)
-- Magic happens here!
SELECT 1 AS Tag
,0 AS Parent
,@xml AS [urlset!1!!xmltext]
,'http://www.sitemaps.org/schemas/sitemap/0.9' AS [urlset!1!xmlns]
,'http://www.sitemaps.org/schemas/sitemap/0.9' AS [urlset!1!xmlns:image]
FOR XML EXPLICIT
模板 xml:
<urlset xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc></loc>
<changefreq></changefreq>
<image:image>
<image:loc></image:loc>
<image:caption></image:caption>
</image:image>
</url>
</urlset>
我想要的是这样的结果:
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://www.example.com/product/dkp-4658551/%D9%85%D8%A7%D9%86%D8%AA%D9%88-%D8%B2%D9%86%D8%A7%D9%86%D9%87-27-%D9%85%D8%AF%D9%84-%DA%AF%D9%84-%D9%88-%D9%BE%D9%86%D8%AC%D8%B1%D9%87-%DA%A9%D8%AF-v78-%D8%B1%D9%86%DA%AF-%D8%B7%D9%88%D8%B3%DB%8C</loc>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
<image:image>
<image:loc>https://example.com/mysite-products/3d1201f33f4e6dd6114ee6ec55be20fb5581f382_1615206830.jpg?x-oss-process=image/resize,m_lfit,h_350,w_350/quality,q_60</image:loc>
<image:caption>مانتو زنانه 27 مدل گل و پنجره کد V78 رنگ طوسی</image:caption>
</image:image>
</url>
</urlset>
【问题讨论】:
-
不是!我只想生成一个 XML 文件 @DaleK
-
我从@DaleK产品表中读取数据
-
好的。 @DaleK 检查我的问题
-
请再次检查@DaleK
-
在提出问题时,您需要提供一个可重现的最小示例。请参考以下链接:stackoverflow.com/help/minimal-reproducible-example 请提供以下内容: (1) DDL 和样本数据填充,即 CREATE table(s) 加上 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上面#1 中的样本数据。 (4) 你的 SQL Server 版本 (SELECT @@version;)
标签: sql sql-server tsql xquery sitemap