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

Откуда:
Сообщений: 28
Добрый день!
Подскажите пожалуйста, как пропарсить XML таким образом, чтобы получить данные в одной строке?
Есть одна сложность, некоторые параметры называются одинаково:

DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc = '
<root>
<Row ID= "1" OrderNumber="10">
<Cell ColumnName="agrPerson" Value="1" />
<Cell ColumnName="termForAgrStage" Value="success" />
<Cell ColumnName="denyAdd" Value="true" />
</Row>


</root>
'
--
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

SELECT *
FROM OPENXML (@idoc, '/root/Row', 2) WITH
(
ID char(2) '@ID',
OrderNumber char(2) '@OrderNumber',
agrPerson char(20) 'Cell/@Value',
termForAgrStage char(20) 'Cell/@Value',
denyAdd char(20) 'Cell/@Value'
)

--
EXEC sp_xml_removedocument @idoc



Спасибо!
17 янв 19, 14:18    [21787886]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML (данные в одну строку)  [new]
invm
Member

Откуда: Москва
Сообщений: 9123
SELECT *
FROM OPENXML (@idoc, '/root/Row', 2) WITH
(
ID char(2) '@ID',
OrderNumber char(2) '@OrderNumber',	
agrPerson char(20) 'Cell[@ColumnName = "agrPerson"]/@Value',
termForAgrStage char(20) 'Cell[@ColumnName = "termForAgrStage"]/@Value',
denyAdd char(20) 'Cell[@ColumnName = "denyAdd"]/@Value'
)
17 янв 19, 14:31    [21787903]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML (данные в одну строку)  [new]
Максим_78
Member

Откуда:
Сообщений: 28
invm,
Спасибо большое за помощь!!!
Но как обычно бывает, внезапно возникла новая проблемка.
Не много дополнил исходный XML и теперь выполнение запроса завершается ошибкой и кириллицу местами не понимает, хотя я изменил тип поля "condition":

The XML parse error 0xc00ce559 occurred on line number 15, near the XML text " <Cell ColumnName="condition" Value="<conds> <cond name="?????" value="1000000" criteria="lte" /> <cond name="??????" value="13" criteria="e" /> <cond name="??????? ??????" value="3" criteria="e" /> <cond name="?????? ???????????" value="1" criteria="e" />".
Msg 6602, Level 16, State 2, Procedure sp_xml_preparedocument, Line 1
The error description is 'Unexpected end of file.'.
Msg 8179, Level 16, State 5, Line 28
Could not find prepared statement with handle 0.



DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc = '
<Rows IDCounter="15">
<Row ID="1" OrderNumber="1">
<Cell ColumnName="agrPerson" Value="9431" />
<Cell ColumnName="termForAgrStage" Value="" />
<Cell ColumnName="condition" Value="" />
<Cell ColumnName="denyDelete" Value="true" />
<Cell ColumnName="denyMove" Value="false" />
<Cell ColumnName="denyAdd" Value="" />
<Cell ColumnName="controlTerm" Value="true" />
</Row>
<Row ID="4" OrderNumber="2">
<Cell ColumnName="agrPerson" Value="9429" />
<Cell ColumnName="termForAgrStage" Value="" />
<Cell ColumnName="condition" Value="<conds> <cond name="Сумма" value="1000000" criteria="lte" /> <cond name="Валюта" value="13" criteria="e" /> <cond name="Условие оплаты" value="3" criteria="e" /> <cond name="Статус контрагента" value="1" criteria="e" /> </conds>" />
<Cell ColumnName="denyDelete" Value="true" />
<Cell ColumnName="denyMove" Value="false" />
<Cell ColumnName="denyAdd" Value="" />
<Cell ColumnName="controlTerm" Value="true" />
</Row>
</Rows>
'
--
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

SELECT *
FROM OPENXML (@idoc, '/Rows/Row', 2) WITH
(
IDCounter char(2) '../@IDCounter',
ID char(2) '@ID',
OrderNumber char(2) '@OrderNumber',
agrPerson char(20) 'Cell[@ColumnName = "agrPerson"]/@Value',
termForAgrStage char(20) 'Cell[@ColumnName = "termForAgrStage"]/@Value',
condition nvarchar(max) 'Cell[@ColumnName = "condition"]/@Value',
denyDelete char(20) 'Cell[@ColumnName = "denyDelete"]/@Value',
denyMove char(20) 'Cell[@ColumnName = "denyMove"]/@Value',
denyAdd char(20) 'Cell[@ColumnName = "denyAdd"]/@Value',
controlTerm char(20) 'Cell[@ColumnName = "controlTerm"]/@Value'
)
17 янв 19, 15:12    [21787973]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML (данные в одну строку)  [new]
invm
Member

Откуда: Москва
Сообщений: 9123
Максим_78,

DECLARE @idoc int
DECLARE @doc nvarchar(1000)
SET @doc = N'
<Rows IDCounter="15">
<Row ID="1" OrderNumber="1">
<Cell ColumnName="agrPerson" Value="9431" />
<Cell ColumnName="termForAgrStage" Value="" />
<Cell ColumnName="condition" Value="" />
<Cell ColumnName="denyDelete" Value="true" />
<Cell ColumnName="denyMove" Value="false" />
<Cell ColumnName="denyAdd" Value="" />
<Cell ColumnName="controlTerm" Value="true" />
</Row>
<Row ID="4" OrderNumber="2">
<Cell ColumnName="agrPerson" Value="9429" />
<Cell ColumnName="termForAgrStage" Value="" />
<Cell ColumnName="condition" Value="<conds>
 <cond name="Сумма" value="1000000" criteria="lte" />
 <cond name="Валюта" value="13" criteria="e" />
 <cond name="Условие оплаты" value="3" criteria="e" /> <cond name="Статус контрагента" value="1" criteria="e" />
 </conds>" />
<Cell ColumnName="denyDelete" Value="true" />
<Cell ColumnName="denyMove" Value="false" />
<Cell ColumnName="denyAdd" Value="" />
<Cell ColumnName="controlTerm" Value="true" />
</Row>
</Rows>
'
17 янв 19, 15:32    [21788015]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг XML (данные в одну строку)  [new]
Максим_78
Member

Откуда:
Сообщений: 28
invm,
Уважаемый invm!
Большое Вам человеческое спасибо за оказанную помощь!
Всего Вам хорошего!
17 янв 19, 15:58    [21788068]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить