powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / парсинг xml и подстановка значений в xml в блок
13 сообщений из 13, страница 1 из 1
парсинг xml и подстановка значений в xml в блок
    #39881157
lex871
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, помогите пожалуйста с SQL запросом
есть таблица где хранится id и xml
id - уникальное значение
мне надо из xml получить данные
и подставить их в <Name2>сюда данные</Name2>
с перезаписью всего существующего в блоке <Name2>всё что тут есть - перезаписать</Name2>
может есть пример цикла, как это можно сделать?
и еще проблема, что надо как-то округлять данные из xml до целого, т.е. там хранится <fat3>11.000000000</fat3> а мне надо значение <fat3>11</fat3>
--
Я понимаю что всё муторно описал, но мне бы пример какой-нить чтобы его адаптировать
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39881159
lex871
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
то что получил парсингомidКалорийность: Ж:10.000000000гр. , Б:10.000000000гр. , У:10.000000000гр. , Калорийность:170.000000000 ккал409FB9AD-CC87-498A-AAFA-07D848D288E2Калорийность: Ж:11.000000000гр. , Б:12.000000000гр. , У:13.000000000гр. , Калорийность:199.000000000 ккал78C7310B-1253-4A44-9DEC-30428108D3E7Калорийность: Ж:10.000000000гр. , Б:10.000000000гр. , У:10.000000000гр. , Калорийность:170.000000000 ккал0DDB68B5-500F-970C-0151-3EDD574B21CBКалорийность: Ж:10.000000000гр. , Б:20.000000000гр. , У:30.000000000гр. , Калорийность:290.000000000 ккал29D2FF4D-DB92-499E-83F4-9FEB3723B91B

это бы округлить до

то что получилосьidКалорийность: Ж:10гр. , Б:10гр. , У:10гр. , Калорийность:170 ккал409FB9AD-CC87-498A-AAFA-07D848D288E2Калорийность: Ж:11гр. , Б:12гр. , У:13гр. , Калорийность:199 ккал78C7310B-1253-4A44-9DEC-30428108D3E7Калорийность: Ж:10гр. , Б:10гр. , У:10гр. , Калорийность:170 ккал0DDB68B5-500F-970C-0151-3EDD574B21CBКалорийность: Ж:10гр. , Б:20гр. , У:30гр. , Калорийность:290 ккал29D2FF4D-DB92-499E-83F4-9FEB3723B91B
и подставить перезаписью каждому id
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39881161
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex871, replace value of.

И это не XML.
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39881173
lex871
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Minamoto, спасибо за ответ. А как можно округлять я столбец получаю запросом
Код: sql
1.
select 'Калорийность:'+' Ж:'+CAST(cast(xml as xml).query('/r/fatAmount/node()') as nvarchar(max)) + 'гр. , Б:' + CAST(cast(xml as xml).query('/r/fiberAmount/node()') as nvarchar(max))+'гр. , У:'+ CAST(cast(xml as xml).query('/r/carbohydrateAmount/node()') as nvarchar(max))+'гр. , Калорийность:'+ CAST(cast(xml as xml).query('/r/energyAmount/node()') as nvarchar(max))+' ккал', * from .[dbo].[entity]
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39881184
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex871,


Код: sql
1.
2.
3.
SELECT CAST(CAST(CAST(XML AS XML).value('(/r/fatAmount/text())[1]', 'numeric(36, 10)') AS int) AS nvarchar(MAX))
	,*
FROM [dbo].[entity]
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39881598
lex871
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
set @dest_xml.modify('replace value of (.//description/text())[1] with sql:variable("@bar1")')
перезаписывает только в том случае, если блок содержит значение, а если он пустой, то как правильно тут поменять?
<description /> - вот такой не перезаписывает
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39881609
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex871set @dest_xml.modify('replace value of (.//description/text())[1] with sql:variable("@bar1")')
перезаписывает только в том случае, если блок содержит значение, а если он пустой, то как правильно тут поменять?
<description /> - вот такой не перезаписываетНе нашел более лучшего выхода, чем сначала записать полный тэг, потом удалить лишний:

Код: sql
1.
2.
SET @dest_xml.modify('insert <description>{sql:variable("@bar1")}</description> as last into (.//description/..)[1]')
SET @dest_xml.modify('delete (.//description)[1]')
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39881620
lex871
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Minamoto, спасибо большое. Всё вроде получилось!
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39882195
DbDude
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Minamoto, привет.
Есть еще вот такой вариант:

Код: sql
1.
2.
3.
4.
5.
6.
DECLARE @bar1 VARCHAR(max) = 'new text'
DECLARE @xml XML = '<description>previous text</description>
                    <description/>'

SELECT @xml.query('for $d in description
return <description>{sql:variable("@bar1")}</description>')
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39882208
DbDude
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lex871, округлить до целого можно так:
Код: sql
1.
2.
3.
DECLARE @xml XML = '<fat3>11.66</fat3><fat3>11.22</fat3>'
SELECT @xml.query('for $f in fat3
return <fat3>{fn:round(data($f/text())[1])}</fat3>')
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39882233
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DbDudeMinamoto, привет.
Есть еще вот такой вариант:

Код: sql
1.
2.
3.
4.
5.
6.
DECLARE @bar1 VARCHAR(max) = 'new text'
DECLARE @xml XML = '<description>previous text</description>
                    <description/>'

SELECT @xml.query('for $d in description
return <description>{sql:variable("@bar1")}</description>')

Ну так себе решение... Для некоторых вариантов XML подойдет, но далеко не для всех.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE @bar1 VARCHAR(max) = 'new text'
DECLARE @xml XML = '<test>
    <some_data>some_value</some_data>
    <description>previous text</description>
    <description/>
</test>'

SELECT @xml.query('for $d in description
return <description>{sql:variable("@bar1")}</description>')



Для общего развития, конечно, спасибо, такого использования не видел.
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39882254
DbDude
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Minamoto,
если нужно заменить текст для узлов с разными именами, то можно сделать так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DECLARE @bar1 VARCHAR(max) = 'new text'
DECLARE @xml XML = '<test>
    <some_data>some_value</some_data>
    <description>previous text</description>
    <description/>
</test>'

SELECT @xml.query('for $d in test/*        
    return if (local-name($d) = "some_data")
        then <some_data>{sql:variable("@bar1")}</some_data> else 
        if (local-name($d) = "description")
        then <description>{sql:variable("@bar1")}</description> else $d')
...
Рейтинг: 0 / 0
парсинг xml и подстановка значений в xml в блок
    #39882258
DbDude
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Minamoto, или лучше вот так, чтобы корневой узел не пропадал:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
DECLARE @bar1 VARCHAR(max) = 'new text'
DECLARE @xml XML = '<test>
    <some_data>some_value</some_data>
    <description>previous text</description>
    <description/>    
</test>'

SELECT @xml.query('
for $t in test
return <test> 
{for $d in $t/*        
    return if (local-name($d) = "some_data")
        then <some_data>{sql:variable("@bar1")}</some_data> else 
        if (local-name($d) = "description")
        then <description>{sql:variable("@bar1")}</description> else $d}
</test>')
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / парсинг xml и подстановка значений в xml в блок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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