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

Откуда: ☭
Сообщений: 72914
Служба, работающая с разными веб-сервисами, складывает их ответы в таблицу с полем ntext. Есть например такой ответ:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<soap:Body>
		<BatchCheckNNResponse xmlns="urn:fbs:v2">
			<BatchCheckNNResult>&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;checkResults&gt;&lt;batchId&gt;e699b293-68b6-4107-8322-be812ec8bb8d&lt;/batchId&gt;&lt;/checkResults&gt;</BatchCheckNNResult>
		</BatchCheckNNResponse>
	</soap:Body>
</soap:Envelope>

Вложенный xml соответственно имеет вид:
<?xml version="1.0" encoding="utf-8" ?>
<checkResults>
	<batchId>e699b293-68b6-4107-8322-be812ec8bb8d</batchId>
</checkResults>

Пытаюсь вытащить его таким запросом:
declare @resp xml

SELECT  @resp = txt.text
FROM OpenXML(@iDoc, '*',0) node
inner join OpenXML(@iDoc, '*',0) txt on txt.parentid=node.id
where node.localname='BatchCheckNNResult' and txt.nodetype=3

Получаю ошибку "невозможно переключить кодировку". Хочу вырезать процессинговую инструкцию:
SUBSTRING(txt.text,CHARINDEX('>',txt.text)+1, LEN(txt.text)-CHARINDEX('>',txt.text))
Получаю ошибку "Тип данных аргумента ntext недопустим для аргумента 1 функции len."
Конвертировать txt.text в nvarchar(max) не подходит, xml теоретически может быть довольно большим.

Подозреваю, что делаю тупо, глупо и нелепо. А как правильно получить в @resp вложенный xml?
19 июл 12, 18:02    [12889984]     Ответить | Цитировать Сообщить модератору
 Re: Разбор XML вложенного в XML  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> Конвертировать txt.text в nvarchar(max) не подходит, xml теоретически может быть довольно большим.

больше 2Гб ???

оно, можно и не выкусывать, в общем-то.
SELECT  @resp = cast(txt.text as varchar(max))
FROM OpenXML(@iDoc, '*',0) node
inner join OpenXML(@iDoc, '*',0) txt on txt.parentid=node.id
where node.localname='BatchCheckNNResult' and txt.nodetype=3
19 июл 12, 19:54    [12890298]     Ответить | Цитировать Сообщить модератору
 Re: Разбор XML вложенного в XML  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72914
daw
> Конвертировать txt.text в nvarchar(max) не подходит, xml теоретически может быть довольно большим.

больше 2Гб ???

оно, можно и не выкусывать, в общем-то.
SELECT  @resp = cast(txt.text as varchar(max))
FROM OpenXML(@iDoc, '*',0) node
inner join OpenXML(@iDoc, '*',0) txt on txt.parentid=node.id
where node.localname='BatchCheckNNResult' and txt.nodetype=3
Я думал у max объем гораздо меньше.

Спасибо, так сработало.
19 июл 12, 20:08    [12890322]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить