У меня возникла проблема с анализом XML с SQL2008. Я пробовал этот 100 различных способов и не могу получить никаких данных.Анализ XML с MSSQL 2008
Я пытаюсь получить данные, такие как Title, date_start из XML.
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)
Примечание: ошибок нет - результаты просто отсутствуют. Благодаря! – user2852137
Что вы ожидаете от вывода? Список вакансий? –
Zoff - В конечном счете, я хочу получить несколько разных полей из XML, но ради этой проблемы я был бы рад получить только один, поэтому я выбрал название. – user2852137