【发布时间】:2014-11-25 14:55:31
【问题描述】:
我在使用 SQL2008 解析 XML 时遇到问题。我已经尝试了这 100 种不同的方法,但无法获取任何数据。
我正在尝试从 XML 中获取 Title、date_start 等数据。
XML 将进入我的#xml1 表——我可以从@XMLtable 或#xml1 中进行选择,然后查看列中的 XML。
这是 XML:
<VacancyList xsi:schemaLocation="http://www.somesite.com/list.xsd">
<Vacancy id="1238059" date_start="2014-08-12">
<Versions>
<Version language="en">
<Title>Web Developer </Title>
<TitleHeading/>
<Categories>
<Item type="area-of-interest" id="32203">SQL</Item>
<Item type="duration" id="permanent">Permanent</Item>
<Item type="extent" id="fulltime">Full-time</Item>
<Item type="operating-time" id="day">Day</Item>
</Categories>
</Version>
</Versions>
</Vacancy>
<Vacancy id="1238059" date_start="2014-07-14">
<Versions>
<Version language="en">
<Title>DBA </Title>
<TitleHeading/>
<Categories>
<Item type="area-of-interest" id="32203">Oracle</Item>
<Item type="duration" id="permanent">Permanent</Item>
<Item type="extent" id="fulltime">Full-time</Item>
<Item type="operating-time" id="day">Day</Item>
</Categories>
</Version>
</Versions>
</Vacancy>
</VacancyList>
这是我的 SQL:
USE tempdb
GO
IF OBJECT_ID('tempdb..#xml1') IS NOT NULL DROP TABLE #xml1
CREATE TABLE #xml1 ( yourXML XML )
GO
DECLARE @URL VARCHAR(8000)
SELECT @URL = 'https://URLofTheXMLFeed.com/list.xml'
DECLARE @Response varchar(8000)
DECLARE @XML xml
DECLARE @Obj int
DECLARE @Result int
DECLARE @HTTPStatus int
DECLARE @ErrorMsg varchar(MAX)
EXEC @Result = sp_OACreate 'MSXML2.XMLHttp', @Obj OUT
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'
EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT
INSERT #xml1 ( yourXML )
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'--, @Response OUT
Declare @XMLOutput xml
SET @XMLOutput = (SELECT yourXML FROM #xml1)
SELECT
val.value('(Title/text())[1]', 'varchar(100)') as Title
FROM
#xml1
CROSS APPLY yourXML.nodes('//Vacancy') AS Txn(svc)
CROSS APPLY svc.nodes('Versions') AS svc(rsp)
CROSS APPLY rsp.nodes('Version') as rsp(val)
【问题讨论】:
-
注意:没有错误 - 只是没有结果。谢谢!
-
您期望输出什么?职位列表?
-
Zoff - 最终我想从 XML 中获取一些不同的字段,但是为了这个问题,我很乐意只得到一个,所以我选择了标题。
标签: sql-server xml sql-server-2008