powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Парсинг XML (данные в одну строку)
5 сообщений из 5, страница 1 из 1
Парсинг XML (данные в одну строку)
    #39760874
Максим_78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Подскажите пожалуйста, как пропарсить 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



Спасибо!
...
Рейтинг: 0 / 0
Парсинг XML (данные в одну строку)
    #39760885
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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'
)
...
Рейтинг: 0 / 0
Парсинг XML (данные в одну строку)
    #39760937
Максим_78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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" /&gt".
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'
)
...
Рейтинг: 0 / 0
Парсинг XML (данные в одну строку)
    #39760965
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Максим_78,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
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>
'
...
Рейтинг: 0 / 0
Парсинг XML (данные в одну строку)
    #39761000
Максим_78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,
Уважаемый invm!
Большое Вам человеческое спасибо за оказанную помощь!
Всего Вам хорошего!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Парсинг XML (данные в одну строку)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]