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

Откуда:
Сообщений: 1062
Помогите вывести в xml иерархию!

Имеется 4 таблицы t1, t2, t3, t4, связанные master-detail.
t1->t2 и t1->t3->t4

Create table t1 (id_t1 int, cm1 varchar(10));
Create table t2 (id_t2 int, id_t1 int, cm2 varchar(10));
Create table t3 (id_t3 int, id_t1 int, cm3 varchar(10));
Create table t4 (id_t4 int, id_t3 int, cm4 varchar(10));

insert into t1 (1, 't1');
insert into t2 (1, 1, 't21');
insert into t2 (2, 1, 't22');
insert into t3 (1, 1, 't31');
insert into t3 (2, 1, 't32');
insert into t4 (1, 2, 't42');

Нужно вывести XML следующего вида:
<item>
<t1>
<cm1>t1</cm1>
<t2>
<cm2>t21</cm2>
<cm2>t22</cm2>
</t2>
<t3>
<cm3>t31</cm3>
<t4 />
<cm3>t32</cm3>
<t4>
<cm4>t42</cm4>
</t4>
</t3>
</t1>
</item>

Коллеги, помогите чем можете. Дуб в этом вопросе :-(
Особенно меня смущает вот этот кусок:
<cm3>t31</cm3>
<t4 />

И попутно вопрос... А как сделать, чтобы выводимый xml предваряла декларация <?xml version="1.0" encoding="Windows-1251"?>
6 окт 11, 15:47    [11395830]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
uaggster
Особенно меня смущает вот этот кусок:
<cm3>t31</cm3>
<t4 />
Меня тоже :-)

Это не XML, закрывающий тег не может быть без открывающего. Хотя я конечно в этом деле не специалист...
6 окт 11, 16:30    [11396207]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
iljy
Member

Откуда:
Сообщений: 8711
alexeyvg,

это вполне себе нормальная форма записи пустого тега. Он одновременно является открывающим и закрывающим, так что все в порядке.
6 окт 11, 16:35    [11396246]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
iljy
alexeyvg,

это вполне себе нормальная форма записи пустого тега. Он одновременно является открывающим и закрывающим, так что все в порядке.
А, точно, забыл.

Вот что значит редко работать с XML :-(
6 окт 11, 16:36    [11396260]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
uaggster
Member

Откуда:
Сообщений: 1062
Не, коллеги, не вопрос! пусть <t4></t4> будет, бог с ним!
6 окт 11, 16:41    [11396301]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
uaggster,

Шапку, непонятным для меня способом, можно прикрутить так
10448075
6 окт 11, 16:48    [11396377]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
iljy
Member

Откуда:
Сообщений: 8711
uaggster,

select * from
t1 left join t2 on t1.id_t1 = t2.id_t1
	left join t3 on t1.id_t1 = t3.id_t1
	left join t4 on t4.id_t3 = t3.id_t3
for xml auto, root('item')
пойдет?
6 окт 11, 16:55    [11396444]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
iljy
Member

Откуда:
Сообщений: 8711
uaggster,

точнее так
select * from
t1 left join t2 on t1.id_t1 = t2.id_t1
	left join t3 on t1.id_t1 = t3.id_t1
	left join t4 on t4.id_t3 = t3.id_t3
for xml auto, root('item'),elements
6 окт 11, 16:57    [11396464]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
SignOff
Member

Откуда: Stockholm
Сообщений: 424
iljy,

А для parent-child ?
6 окт 11, 16:58    [11396474]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
iljy
Member

Откуда:
Сообщений: 8711
SignOff
iljy,

А для parent-child ?

Что для parent-child?
6 окт 11, 17:02    [11396520]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
uaggster
Member

Откуда:
Сообщений: 1062
iljy, прошу прощения но не складывается. :-(
Такой запрос
select cm1, cm2, cm3, cm4 from
t1 left join t2 on t1.id_t1 = t2.id_t1
	left join t3 on t1.id_t1 = t3.id_t1
	left join t4 on t4.id_t3 = t3.id_t3
for xml auto, root('item'),elements
вот, что выдает:
<item>
  <t1>
    <cm1>t1</cm1>
    <t2>
      <cm2>t21</cm2>
      <t3>
        <cm3>t31</cm3>
        <t4 />
      </t3>
      <t3>
        <cm3>t32</cm3>
        <t4>
          <cm4>t42</cm4>
        </t4>
      </t3>
    </t2>
    <t2>
      <cm2>t22</cm2>
      <t3>
        <cm3>t31</cm3>
        <t4 />
      </t3>
      <t3>
        <cm3>t32</cm3>
        <t4>
          <cm4>t42</cm4>
        </t4>
      </t3>
    </t2>
  </t1>
</item>
А хотелось бы набор тегов из таблицы t2 наверху... гм... отдельно от других, а теги t3-t4 - в виде иерархий ниже.
<item>
	<t1>
		<cm1>t1</cm1>
		<t2>
			<cm2>t21</cm2>
			<cm2>t22</cm2>
		</t2>
		<t3>
			<cm3>t31</cm3>
			<t4>
				<cm4 />
			</t4>
			<cm3>t32</cm3>
			<t4>
				<cm4>t42</cm4>
			</t4>
		</t3>
	</t1>
</item>


Кроме того, я протупил :-(
На самом деле "тот кусок"
<cm3>t31</cm3>
<t4 />
мне нужен в виде:
<cm3>t31</cm3>
<t4>
<m4 />
</t4>

И вот это, похоже, совсем засада...
6 окт 11, 20:04    [11397813]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
uaggster
Member

Откуда:
Сообщений: 1062
trew
uaggster,

Шапку, непонятным для меня способом, можно прикрутить так
10448075

Йоу! trew, спасибо. Симпатичное извращение :-)
6 окт 11, 20:11    [11397824]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
uaggster
Member

Откуда:
Сообщений: 1062
Коллеги, ну помогите чем можете, а?

Я так понимаю, что это должно выглядеть как то так:
Select sm1, (Select sm2 from t1 a inner join t2 b on a.id_t1 = b.id_t1 where a.id_t1=@id_t1 for xml auto, elements),
(Select * t1 aa left join t3 bb on aa.id_t1 = bb.id_t1
       left join t4 on t4.id_t3 = aa.id_t3 
       Where aa.id_t1=@id_t1
       for xml auto, elements)
from t1
Where t1.id_t1=@id_t1
for xml auto, root('item'), elements
Но никак не могу победить синтаксис. Вообще не пойму, что эта фигня от меня хочет!

Я хоть в правильном направлении думаю, а?!
8 окт 11, 14:38    [11407017]     Ответить | Цитировать Сообщить модератору
 Re: Помогите вывести иерархию в XML!  [new]
screation
Member

Откуда:
Сообщений: 1
почти в правильном :)
9 окт 11, 11:24    [11408785]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить