2011-11-16 6 views
5

SQLを使用してRSSフィードからdc:creatorの値を取得する方法がわかりません。 これは私のXML/RSSフィードです:私のSQLではSQL XMLを使用してdc:creatorの値を取得する

<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> 

私は値を取得するには、このようなものを使用する - pubDateのために例えば、私はこのようなものを使用します。

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) 

これは正常に動作し、私はDCを取得しようとしていますときには:クリエイター値「ジョン・ドウ」、次はちょうど私にエラーを与える:

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. 

私はRSSフィードから複数の列を選択できるようにする必要があります。誰でもdc:creatorの価値を得るためのソリューションや方向性を提供できますか?

私は別の質問があります - あなたがサブ選択でそれをやっているなら、あなたはどのようにコードを作りますか?

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 

"; WITH XMLNAMESPACES"でコードが壊れています。ステートメントに直接名前空間を含めることは可能ですか?

答えて

8

このような何か試してください:あなたが複数のアイテムをキャッチする必要がある場合は

DECLARE @xml XML 
SET @xml = cast('my rss feed here' AS xml) 

;WITH XMLNAMESPACES('http://purl.org/dc/elements/1.1/' AS dc) 
SELECT 
    @xml.value('(rss/channel/item/dc:creator)[1]', 'nvarchar(100)') 

を - この試してみてください。

DECLARE @xml XML 
SET @xml = cast('my rss feed here' AS xml) 

;WITH XMLNAMESPACES('http://purl.org/dc/elements/1.1/' AS dc) 
SELECT 
    RSS.Item.value('(dc:creator)[1]', 'nvarchar(100)') 
FROM 
    @xml.nodes('/rss/channel/item') as RSS(Item) 
関連する問題