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

Откуда:
Сообщений: 26
Здравствуйте!

Помогите, пожалуйста, разобраться с такой проблемой. На вход программы поступают файлы следующего вида:

declare @x xml='<?xml version="1.0" encoding="windows-1251" ?>
<Файл xmlns="http://schema.pfr.ru">
	<ИмяФайла>1.XML</ИмяФайла>	
	<Документ>
		<Отчет>
			<Номер>1</Номер>			
		</Отчет>
	</Документ>
</Файл>
';

 


либо

declare @x xml='<?xml version="1.0" encoding="windows-1251" ?>
<Файл>
	<ИмяФайла>1.XML</ИмяФайла>	
	<Документ>
		<Отчет>
			<Номер>1</Номер>			
		</Отчет>
	</Документ>
</Файл>
'


То есть разница в том, что в первом варианте namespace указан, во втором нет. Чтобы распарсить данные файлы, используется value, либо так:

with xmlnamespaces (default 'http://schema.pfr.ru')
select @x.value('(//Документ/Отчет)[1]', 'varchar(100)')                           


либо так:

select @x.value('(//Документ/Отчет)[1]', 'varchar(100)')     


Первый вариант запроса не работает с файлом второго вида, второй вариант запроса не работает с файлом первого вида, выдается Null. Вопрос: можно ли написать универсальный запрос, игнорирующий наличие xmlns и выбирающий нужные данные?
11 янв 16, 13:04    [18661822]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг xml с xmlns  [new]
invm
Member

Откуда: Москва
Сообщений: 9405
alol55
Вопрос: можно ли написать универсальный запрос, игнорирующий наличие xmlns и выбирающий нужные данные?
select @x1.value('(//*:Документ/*:Отчет)[1]', 'varchar(100)');
11 янв 16, 13:15    [18661875]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг xml с xmlns  [new]
alol55
Member

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

работает!! Спасибо большое)
11 янв 16, 13:42    [18662007]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить