Tôi không chắc chắn cách lấy giá trị của dc: creator từ một nguồn cấp dữ liệu RSS bằng cách sử dụng SQL. Đây là xml của tôi/rss nguồn cấp dữ liệu:Nhận giá trị của dc: người tạo bằng cách sử dụng SQL XML
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
<channel>
<title>Foobar RSS</title>
<link>http://www.foobar.com/</link>
<description>RSS feed</description>
<language>en</language>
<ttl>15</ttl>
<item>
<title>This is my title</title>
<link>http://www.foobar.com/link/blabla</link>
<description>Bla..bla..bla..</description>
<dc:creator>John Doe</dc:creator>
<guid isPermaLink="false">00082EA751F1D905DE00E7CFA2417DA9</guid>
<pubDate>Wed, 26 Oct 2011 00:00:00 +0200</pubDate>
</item>
</channel>
</rss>
Trong SQL của tôi, tôi sử dụng một cái gì đó như thế này để có được những giá trị - Thường dùng cho các pubDate tôi sử dụng một cái gì đó như thế này:
DECLARE @xml XML
SET @xml = cast('my rss feed here' AS xml)
SELECT
convert(datetime,substring(T.nref.value('pubDate[1]','nvarchar(100)'),6,20)) as pubdate,
FROM @xml.nodes('//item') AS T(nref)
này hoạt động tốt, nhưng khi tôi đang cố gắng để có được dc: giá trị sáng tạo 'John Doe', sau đây chỉ mang lại cho tôi một lỗi:
SELECT
T.nref.value('dc:creator','nvarchar(100)') as creator
FROM @xml.nodes('//item') AS T(nref)
error:
XQuery [value()]: The name "dc" does not denote a namespace.
tôi cần để có thể chọn nhiều cột từ rss nguồn cấp dữ liệu. Ai có thể cung cấp một giải pháp hoặc hướng để có được giá trị của dc: người sáng tạo?
Tôi có một câu hỏi khác - bạn sẽ xây dựng mã như thế nào nếu bạn đang thực hiện nó trong một lựa chọn phụ?
E.g.
INSERT INTO RSSResults (ID, pubDate)
SELECT @ID, tbl.pubDate FROM (
;WITH XMLNAMESPACES('http://purl.org/dc/elements/1.1/' AS dc)
SELECT
RSS.Item.value('(dc:creator)[1]', 'nvarchar(100)') as pubDate
FROM
@xml.nodes('/rss/channel/item') as RSS(Item)) AS tbl
Mã ngắt tại "; VỚI XMLNAMESPACES". Có thể bao gồm không gian tên trực tiếp trong tuyên bố bằng cách nào đó không?