powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Еще один запрос на модификацию XML
3 сообщений из 3, страница 1 из 1
Еще один запрос на модификацию XML
    #39849183
Диам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Есть необходимость изменить структуру xml из такой
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
<response xmlns="LoginomDecisionMaker">
	<items>
		<et>REPORT_HEADER</et>
		<eid>A00FB6CC43A8E7499D0324C68ADD975D</eid>
		<k>CRA_CODE</k>
		<v>НБКИ</v>
	</items>
	<items>
		<et>REPORT_HEADER</et>
		<eid>A00FB6CC43A8E7499D0324C68ADD975D</eid>
		<k>PARENT_ID</k>
		<v>2C5F109A4D2D044E9C1CE2911F566476</v>
	</items>
<items>
		<et>PERSON_DATA</et>
		<eid>1936180C928C1F4886755335EA686B35</eid>
		<k>CRA_CODE</k>
		<v>НБКИ</v>
	</items>
	<items>
		<et>PERSON_DATA</et>
		<eid>1936180C928C1F4886755335EA686B35</eid>
		<k>PARENT_ID</k>
		<v>2C5F109A4D2D044E9C1CE2911F566476</v>
	</items>
	<items>
		<et>PERSON_DATA</et>
		<eid>1936180C928C1F4886755335EA686B35</eid>
		<k>name1</k>
		<v>BUSH</v>
	</items>
	<items>
		<et>PERSON_DATA</et>
		<eid>1936180C928C1F4886755335EA686B35</eid>
		<k>first</k>
		<v>GEORGE</v>
	</items>

<items>
		<et>PERSON_DATA</et>
		<eid>0F369AFFC11C864AB9911E72FFB4A6B2</eid>
		<k>CRA_CODE</k>
		<v>НБКИ</v>
	</items>
	<items>
		<et>PERSON_DATA</et>
		<eid>0F369AFFC11C864AB9911E72FFB4A6B2</eid>
		<k>PARENT_ID</k>
		<v>2C5F109A4D2D044E9C1CE2911F566476</v>
	</items>
	<items>
		<et>PERSON_DATA</et>
		<eid>0F369AFFC11C864AB9911E72FFB4A6B2</eid>
		<k>name1</k>
		<v>КУСТОВ</v>
	</items>
	<items>
		<et>PERSON_DATA</et>
		<eid>0F369AFFC11C864AB9911E72FFB4A6B2</eid>
		<k>first</k>
		<v>ГЕОРГИЙ</v>
	</items>
	<items>
		<et>PERSON_DATA</et>
		<eid>0F369AFFC11C864AB9911E72FFB4A6B2</eid>
		<k>paternal</k>
		<v>ГЕОРГИЕВИЧ</v>
	</items>

</response>


в такую

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<DOCUMENTS>
	<REPORT>
		<ID>2C5F109A4D2D044E9C1CE2911F566476</ID>
		<REPORT_HEADER>
			<eid>A00FB6CC43A8E7499D0324C68ADD975D</eid>
			<CRA_CODE>НБКИ</CRA_CODE>
		</REPORT_HEADER>
		<PERSON_DATA>
			<eid>1936180C928C1F4886755335EA686B35</eid>
			<CRA_CODE>НБКИ</CRA_CODE>
			<name1>BUSH</name1>
			<first>GEORGE</first>
		</PERSON_DATA>
		<PERSON_DATA>
			<eid>0F369AFFC11C864AB9911E72FFB4A6B2</eid>
			<CRA_CODE>НБКИ</CRA_CODE>
			<name1>КУСТОВ</name1>
			<first>ГЕОРГИЙ</first>
			<paternal>ГЕОРГИЕВИЧ</paternal>
		</PERSON_DATA>
	</REPORT>
</DOCUMENTS>


Основной элемент надо самим поменять с response на DOCUMENT. Элемент REPORT тоже вставляется "в лоб". Он нигде не встречается в исходнике.

Кто может помочь. Примером или за деньги
...
Рейтинг: 0 / 0
Еще один запрос на модификацию XML
    #39849219
Minamoto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диам, от неймспейсов только проблемно избавиться - я вспомню способ только через преобразование в строку и REPLACE, может и красивей вариант есть.

Код: 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.
29.
30.
31.
32.
WITH xmlnamespaces
    (
        DEFAULT 'LoginomDecisionMaker'
    )
SELECT 
    t.rep_id AS 'ID',
    t.rh_eid AS 'REPORT_HEADER/eid',
    t.cra_code AS 'REPORT_HEADER/CRA_CODE',
    (
        SELECT  pd_eid.c AS 'eid',
                @x.value('(/response/items[et/text() = "PERSON_DATA" and k/text() = "CRA_CODE" and eid/text() = sql:column("pd_eid.c")]/v/text())[1]', 'nvarchar(100)') AS 'CRA_CODE',
                @x.value('(/response/items[et/text() = "PERSON_DATA" and k/text() = "name1" and eid/text() = sql:column("pd_eid.c")]/v/text())[1]', 'nvarchar(100)') AS 'name1',
                @x.value('(/response/items[et/text() = "PERSON_DATA" and k/text() = "first" and eid/text() = sql:column("pd_eid.c")]/v/text())[1]', 'nvarchar(100)') AS 'first',
                @x.value('(/response/items[et/text() = "PERSON_DATA" and k/text() = "paternal" and eid/text() = sql:column("pd_eid.c")]/v/text())[1]', 'nvarchar(100)') AS 'paternal'
        FROM    @x.nodes('/response/items[et/text() = "PERSON_DATA" and k/text() = "PARENT_ID" and v/text() = sql:column("t.rep_id")]') AS pd_id (c)
                CROSS APPLY (VALUES (pd_id.c.value('(eid/text())[1]', 'nvarchar(100)'))) AS pd_eid (c)
        FOR XML PATH ('PERSON_DATA'), TYPE
    )
FROM
    (
        SELECT DISTINCT  
            rep_id.c AS rep_id,
            rh_eid.c AS rh_eid,
            cra.c.value('(v/text())[1]', 'nvarchar(100)') AS cra_code
        FROM
            @x.nodes('/response/items[k/text() = "PARENT_ID"]') AS t(c)
            CROSS APPLY (VALUES (t.c.value('(v/text())[1]', 'nvarchar(100)'))) AS rep_id(c)
            CROSS APPLY t.c.nodes('/response/items[et/text() = "REPORT_HEADER" and k/text() = "PARENT_ID" and v/text() = sql:column("rep_id.c")]') AS rh(c)
            CROSS APPLY (VALUES (rh.c.value('(eid/text())[1]', 'nvarchar(100)'))) AS rh_eid (c)
            CROSS APPLY t.c.nodes('/response/items[et/text() = "REPORT_HEADER" and k/text() = "CRA_CODE" and eid/text() = sql:column("rh_eid.c")]') AS cra(c)
    ) AS t
for xml path('REPORT'), root('DOCUMENTS'), type



Проверьте вариант с несколькими REPORT/ID, если есть такие, чтобы понять, правильно ли я понял логику разбиения и сработала ли она.
...
Рейтинг: 0 / 0
Еще один запрос на модификацию XML
    #39849288
Диам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Minamoto,
Спасибо большое. Теперь пора заняться автоматизацией )
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Еще один запрос на модификацию XML
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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