Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 запрос к XML : как обработать <xs:choice>  [new]
любитель XML
Guest
Добрый вечер.
Вопрос дилетантский, прошу специалистов извинить.
Есть такой фрагмент :
		<xs:choice>
			<xs:element name="date" type="date_t" nillable="false">
				<xs:annotation>
					<xs:documentation>Дата</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="datetime" type="datetime_t" nillable="false">
				<xs:annotation>
					<xs:documentation>Дата и время</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:choice>


1. Нужно в параметр @_dt передать значение тэга
'root[1]/header[1]/doc_date[1]/date[1]'
или
'root[1]/header[1]/doc_date[1]/date[1]',
смотря что есть.

Сейчас делаю так :
if not exists (select @_file.value('root[1]/header[1]/doc_date[1]/date[1]', 'datetime'))
select @_file.value('root[1]/header[1]/doc_date[1]/date[1]', 'datetime')
else
select @_file.value('root[1]/header[1]/doc_date[1]/date[1]', 'nvarchar(100)')
Как можно сделать лучше?

2. Можно ли избавиться от [1] в указании пути 'root[1]/header[1]/doc_date[1]/date[1]. и, если можно, то как?
17 июн 09, 17:37    [7312076]     Ответить | Цитировать Сообщить модератору
 Re: запрос к XML : как обработать <xs:choice>  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Сейчас делаю так :
>
> if not exists (select @_file.value('root[1]/header[1]/doc_date[1]/date[1]', 'datetime'))
> select @_file.value('root[1]/header[1]/doc_date[1]/date[1]', 'datetime')
> else
> select @_file.value('root[1]/header[1]/doc_date[1]/date[1]', 'nvarchar(100)')

а выделенное не опечатка? там не datetime[1] должно быть?

Posted via ActualForum NNTP Server 1.4

17 июн 09, 18:26    [7312395]     Ответить | Цитировать Сообщить модератору
 Re: запрос к XML : как обработать <xs:choice>  [new]
любитель XML
Guest
daw

а выделенное не опечатка? там не datetime[1] должно быть?

Да, прошу прощения, конечно опечатка.
Вот рабочий вариант :
if exists 
(select @_file.value('root[1]/header[1]/doc_date[1]/date[1]', 'datetime'))
 select @_file.value('root[1]/header[1]/doc_date[1]/date[1]', 'datetime')
else
 select @_file.value('root[1]/header[1]/doc_date[1]/datetime[1]', 'datetime')
18 июн 09, 09:16    [7313779]     Ответить | Цитировать Сообщить модератору
 Re: запрос к XML : как обработать <xs:choice>  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

так можно:
declare @xml xml
--set @xml = '<root><header><doc_date><date>2009-06-18</date></doc_date></header></root>'
set @xml = '<root><header><doc_date><datetime>2009-06-18T09:23:00.000</datetime></doc_date></header></root>'

select @xml.value('(/root/header/doc_date/date, /root/header/doc_date/datetime)[1]', 'datetime')

Posted via ActualForum NNTP Server 1.4

18 июн 09, 09:25    [7313798]     Ответить | Цитировать Сообщить модератору
 Re: запрос к XML : как обработать <xs:choice>  [new]
любитель XML
Guest
daw

так можно:
declare @xml xml
--set @xml = '<root><header><doc_date><date>2009-06-18</date></doc_date></header></root>'
set @xml = '<root><header><doc_date><datetime>2009-06-18T09:23:00.000</datetime></doc_date></header></root>'

select @xml.value('(/root/header/doc_date/date, /root/header/doc_date/datetime)[1]', 'datetime')


Здорово!!! Спасибо большое!
daw, скажи пожалуйста, где про это почитать?
:)
18 июн 09, 09:39    [7313839]     Ответить | Цитировать Сообщить модератору
 Re: запрос к XML : как обработать <xs:choice>  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
daw
select @xml.value('(/root/header/doc_date/date, /root/header/doc_date/datetime)[1]', 'datetime')
SELECT	@xml.value('(/root/header/doc_date/*[self::date or self::datetime])[1]','DateTime')
18 июн 09, 11:00    [7314217]     Ответить | Цитировать Сообщить модератору
 Re: запрос к XML : как обработать <xs:choice>  [new]
любитель XML
Guest
Mnior
SELECT	@xml.value('(/root/header/doc_date/*[self::date or self::datetime])[1]','DateTime')

Пасиб!
Мужчины, где вы это беретё?
18 июн 09, 11:17    [7314310]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить