Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Help parse xml file  [new]
goodworker
Member

Откуда:
Сообщений: 124
Приветствую!
Господа помогите написать скрипт, который из этого файла получит таблицу с двумя колонками и 3 строками.
Чего-то не получается осилить...
Заранее спасибо отозвавшимся!

К сообщению приложен файл (test.xml - 355bytes) cкачать
11 авг 11, 12:19    [11102922]     Ответить | Цитировать Сообщить модератору
 Re: Help parse xml file  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
goodworker,

какой-то у вас не xml-ный xml... что это такое: <str1>...</stroka1>?
И потом, зачем вы назвали каждый элемент строки по разному? Обычно такое в атрибутах ставят, так что не знаю как ваш шедевр, а вот такой бы я вот так распарсил:
set dateformat mdy
go
declare @x xml
set @x = N'<?xml version="1.0"?>
<ITEM>
<FONDNAME>test</FONDNAME>
<index_micex>
<str id="0">
<DATE>9/3/2007</DATE>
<VAL>10204878.39</VAL>
</str>
<str id="1">
<DATE>9/4/2007</DATE>
<VAL>10112960.03</VAL>
</str>
<str id="2">
<DATE>9/5/2007</DATE>
<VAL>10091572.6</VAL>
</str>
<str id="3">
<DATE>9/30/2007</DATE>
<VAL>10118229.77</VAL>
</str>
</index_micex>
</ITEM>'

select @x
select
	id = n.s.value('(@id)[1]','int'),
	d = n.s.value('(./DATE)[1]','datetime'),
	m = n.s.value('(./VAL)[1]','money')
from
	@x.nodes('/ITEM/index_micex/str') n(s)
11 авг 11, 12:43    [11103144]     Ответить | Цитировать Сообщить модератору
 Re: Help parse xml file  [new]
goodworker
Member

Откуда:
Сообщений: 124
SomewhereSomehow,

вот это опечатка - <str1>...</stroka1>
должно быть <str1>...</str1>

Ваш вариант понятен, а если не
str id="0"
а все таки будет <str0>...</str0><str1>...</str1>, то как быть? стандартно не получится? :(
11 авг 11, 12:52    [11103219]     Ответить | Цитировать Сообщить модератору
 Re: Help parse xml file  [new]
Raoul
Member

Откуда:
Сообщений: 177
<str1></stroka1>, конечно, странно.

Но то, что каждая стрка в своём теге, нестрашно.

Вот работающий код:
declare @x xml;
set @x='<?xml version="1.0"?>
<ITEM>
<FONDNAME>test</FONDNAME>
<index_micex>
<str0>
<DATE>9/3/2007</DATE>
<VAL>10204878.39</VAL>
</str0>
<str1>
<DATE>9/4/2007</DATE>
<VAL>10112960.03</VAL>
</str1>
<str2>
<DATE>9/5/2007</DATE>
<VAL>10091572.6</VAL>
</str2>
<str3>
<DATE>9/30/2007</DATE>
<VAL>10118229.77</VAL>
</str3>
</index_micex>
</ITEM>'


select
	convert(datetime,n.s.value('(./DATE)[1]','nvarchar(10)'),101) as [DATE],
	n.s.value('(./VAL)[1]','decimal(10,2)') as [VAL]
from
	@x.nodes('//index_micex/*') n(s)
11 авг 11, 12:57    [11103263]     Ответить | Цитировать Сообщить модератору
 Re: Help parse xml file  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
goodworker,

можно и так, выше уже привели пример, но, имхо, как-то странно запихивать порядковые номера в названия элементов...
11 авг 11, 13:07    [11103361]     Ответить | Цитировать Сообщить модератору
 Re: Help parse xml file  [new]
goodworker
Member

Откуда:
Сообщений: 124
SomewhereSomehow,

Всем спасибо! Разобрался! А вот почему номера запихиваются в теги... не знаю, но обработать нужно такого типа файл!(
11 авг 11, 13:09    [11103386]     Ответить | Цитировать Сообщить модератору
 Re: Help parse xml file  [new]
Raoul
Member

Откуда:
Сообщений: 177
Можно, кстати, и номера строк извлекать:
declare @x xml;
set @x='<?xml version="1.0"?>
<ITEM>
<FONDNAME>test</FONDNAME>
<index_micex>
<str0>
<DATE>9/3/2007</DATE>
<VAL>10204878.39</VAL>
</str0>
<str1>
<DATE>9/4/2007</DATE>
<VAL>10112960.03</VAL>
</str1>
<str2>
<DATE>9/5/2007</DATE>
<VAL>10091572.6</VAL>
</str2>
<str3>
<DATE>12.11.2007</DATE>
<VAL>10118229.77</VAL>
</str3>
</index_micex>
</ITEM>'


select
	n.s.value('substring(local-name(.),4)','int') as [str],
	n.s.value('(./DATE)[1]','datetime') as [DATE],
	n.s.value('(./VAL)[1]','decimal(10,2)') as [VAL]
from
	@x.nodes('//index_micex/*') n(s)
11 авг 11, 13:17    [11103461]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить