我有一个格式如下的 RSS xml:
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<title></title>
<link></link>
<description></description>
<language></language>
<lastBuildDate></lastBuildDate>
<generator></generator>
<docs></docs>
<managingEditor></managingEditor>
<webMaster></webMaster>
<ttl></ttl>
<item>
<title></title>
<link></link>
<description></description>
<guid isPermaLink="false"></guid>
<pubDate></pubDate>
<author></author>
<dc:date></dc:date>
<dc:publisher></dc:publisher>
<dc:language></dc:language>
</item>
<item>
<title></title>
<link></link>
<description></description>
<guid isPermaLink="false"></guid>
<pubDate></pubDate>
<author></author>
<dc:date></dc:date>
<dc:publisher></dc:publisher>
<dc:language></dc:language>
</item>
</channel>
</rss>
我想在 SQLServer 中用 sp_xml_preparedocument 解析它。 我的问题是“namespce”字段。每个有命名空间的项目中有三个标签,我不知道如何指定它们。 我试过这个:
EXEC sp_xml_preparedocument @hDoc OUTPUT, @xmlContent,'<item xmlns:dc="http://purl.org/dc/elements/1.1/"/>'
但它只解析了第一项而忘记了其余的! 有什么想法吗?
最佳答案
您只得到一行的事实与命名空间无关。您在针对 @hDoc
的 openxml 查询中有一些错误。
可能有一些原因让您仍然使用 openxml,但在您显示不适合您的查询之前,我会建议您改用 XML 数据类型。
with xmlnamespaces('http://purl.org/dc/elements/1.1/' as dc)
select C.N.value('(title/text())[1]', 'nvarchar(100)') as channel_title,
I.N.value('(title/text())[1]', 'nvarchar(100)') as item_title,
I.N.value('(dc:publisher/text())[1]', 'nvarchar(100)') as publisher
from @XML.nodes('/rss/channel') as C(N)
cross apply C.N.nodes('item') as I(N);
关于sql - 为 sp_xml_preparedocument 配置 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17732027/