我一直在尝试使用 sql server 2019 上的 t-sql 从以下 xml 文档中提取数据。
<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.URL1.com/1</loc>
<image:image>
<image:loc>https://www.URL1.com/11</image:loc>
</image:image>
<image:image>
<image:loc>https://www.URL1.com/12</image:loc>
</image:image>
<image:image>
<image:loc>https://www.URL1.com/13</image:loc>
</image:image>
</url>
<url>
<loc>https://www.URL1.com/2</loc>
<image:image>
<image:loc>https://www.URL1.com/21</image:loc>
</image:image>
<image:image>
<image:loc>https://www.URL1.com/22</image:loc>
</image:image>
</url>
<url>
<loc>https://www.URL1.com/3</loc>
<image:image>
<image:loc>https://www.URL1.com/32</image:loc>
</image:image>
</url>
</urlset>
我想将 xml 文档中的数据提取到 SQL Server 表中。我想要的输出如下
+------------------------+-------------------------+
| Loc | ImageLoc |
+------------------------+-------------------------+
| https://www.URL1.com/1 | https://www.URL1.com/11 |
| https://www.URL1.com/1 | https://www.URL1.com/12 |
| https://www.URL1.com/1 | https://www.URL1.com/13 |
| https://www.URL1.com/2 | https://www.URL1.com/21 |
| https://www.URL1.com/2 | https://www.URL1.com/22 |
| https://www.URL1.com/3 | https://www.URL1.com/32 |
+------------------------+-------------------------+
到目前为止,我的尝试都失败了。我已经尝试了很多事情,但唯一能让我获得 Loc 元素的事情是以下,我尝试使用 OUTER APPLY/CROSS APPLY 来加热 ImageLoc,但没有运气。
DECLARE @xml XML
SELECT @xml = BulkColumn
FROM OPENROWSET(BULK 'M:\Files\MyXML.xml', SINGLE_BLOB) x
SELECT
t.c.value('(text())[1]', 'VARCHAR(max)') URLs
, t2.i.value('(text())[1]', 'VARCHAR(max)') URLs
FROM @xml.nodes('*:urlset/*:url/*:loc') t(c)
OUTER APPLY @xml.nodes('*:urlset/*:url/*:loc/*:image/*:loc') t2(i)
能否请你帮忙?提前致谢
这个答案是由lptr在评论中发布的,只是一个小提琴的链接。正如 OP 所说,它回答了他们的问题,并且 lptr 不希望/响应发布答案,我已将其迁移到答案部分。
在这里,他们使用*
通配符而不是定义命名空间来从 XML 中获取值:
SELECT t.c.value('(*:loc/text())[1]', 'VARCHAR(max)') URLs , t2.i.value('(text())[1]', 'VARCHAR(max)') URLs FROM @xml.nodes('*:urlset/*:url') t(c) OUTER APPLY t.c.nodes('*:image/*:loc') t2(i);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句