powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xPath. Использование контейнера из поля таблицы
2 сообщений из 2, страница 1 из 1
xPath. Использование контейнера из поля таблицы
    #36897042
barabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Уперся в реализацию, подскажите, пожалуйста, кто знает:

Есть таблица с полем типа xml, я это поле хочу использовать как контейнер, для других данных из этой таблицы.
Вот составил пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
IF OBJECT_ID('tempdb..#M') is not null 
  DROP TABLE #M
  
CREATE TABLE #M(
                id int, 
                mod1 varchar( 50 ), 
                mod2 varchar( 50 ), 
                mod3 varchar( 50 ), 
                struct xml)

INSERT INTO #M VALUES( 1 , 'M205',   'M206', 'R15', '<Bike ProductID="1" ProductName="Road Bike"/>');
INSERT INTO #M VALUES( 2 , 'Rov-Z1', NULL,   NULL,  '<Bike ProductID="2" ProductName="Mount Bike"/>');
INSERT INTO #M VALUES( 3 , NULL,     NULL,   NULL,  '<Bike ProductID="3" ProductName="Simple Cross-Bike"/>');

SELECT * FROM #M


Хочу получить XML следующего содержания:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<Bikes>
  <Bike ProductID="1" ProductName="Road Bike">
    <Model ModelNumber="1" Name="M205" />
    <Model ModelNumber="2" Name="M206" />
    <Model ModelNumber="3" Name="R15" />    
  </Bike>
  <Bike ProductID="2" ProductName="Mount Bike">
    <Model ModelNumber="1" Name="Rov-Z1" />
  </Bike>
  <Bike ProductID="3" ProductName="Simple Cross-Bike" />
</Bikes>

Пока получается только так:

Код: plaintext
1.
2.
3.
4.
5.
  SELECT struct as '*',
   1  as 'Bike/Model/@ModelNumber',
  mod1 as 'Bike/Model/@Name'
  FROM #M 
  FOR XML PATH(''),
  ROOT('Bikes')


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<Bikes>
  <Bike ProductID="1" ProductName="Road Bike" />
  <Bike>
    <Model ModelNumber="1" Name="M205" />
  </Bike>
  <Bike ProductID="2" ProductName="Mount Bike" />
  <Bike>
    <Model ModelNumber="1" Name="Rov-Z1" />
  </Bike>
  <Bike ProductID="3" ProductName="Simple Cross-Bike" />
  <Bike>
    <Model ModelNumber="1" />
  </Bike>
</Bikes>
...
Рейтинг: 0 / 0
xPath. Использование контейнера из поля таблицы
    #36897666
Andry Trushin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barabas,

никогда не втыкал хмл в базу таким образом.
но!
мне кажется проблема тут:
Код: plaintext
FOR XML PATH(''),
Вам надо как-то связать Bike и Model, попробуйте покопать в этом направлении:
Код: plaintext
FOR XML PATH('Bike[@ProductID=1]'),
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / xPath. Использование контейнера из поля таблицы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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