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

Откуда: Msk
Сообщений: 582
нужно получить такую xml

<P n="UbsParam" r="3">
  <P n="Плательщик" r="13" />
  <P n="Поля платежа" r="23" />
</P>


мой запрос возвращает ошибку
SELECT 'UbsParam' "@n", 3 "@r",
N'Плательщик' "P/@n", 13 "P/@r",
N'Поля платежа' "P/@n", 23 "P/@r"
FOR XML PATH('P')


Имя столбца "P/@n" повторяется. Один и тот же атрибут нельзя создать более одного раза для идентичного XML-тега.
8 авг 16, 23:27    [19518209]     Ответить | Цитировать Сообщить модератору
 Re: как получить xml  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
select 'UbsParam' [@n], 3 [@r],
 (select N'Плательщик' [@n], 13 [@r] for xml path('P'), type),
 (select N'Поля платежа' [@n], 23 [@r] for xml path('P'), type)
for xml path ('P');
9 авг 16, 00:28    [19518306]     Ответить | Цитировать Сообщить модератору
 Re: как получить xml  [new]
NewIvanovec
Member

Откуда: Msk
Сообщений: 582
invm, спасибо, всё работает.

теперь появилась так же задача, добавить пространство имен,
чтобы получилось:

<u:UBS_TRANSFER xmlns:u="http://ubs/system/base">
	<u:P n="UbsParam" r="3">
		<u:P n="Плательщик" r="2">
			<u:S n="Фамилия" v="Кулигина"/>
			<u:S n="Имя" v="Светлана"/>
                <u:P n="Поля платежа" r="2">
                        <u:S n="FIELD_PAYER_ID" v="4370600437162"/>
			<u:S n="SupplierBillID" v="0"/>
                <u:G n="GuidTransaction" v=""/>
         </u:P>
</u:UBS_TRANSFER>


на запрос

WITH XMLNAMESPACES('http://ubs/system/base' AS u)
SELECT 'UbsParam' [@n],
       3 [@r],
       (
           SELECT N'Плательщик' [@n],
                  2 [@r],
                  (
                      SELECT N'Фамилия' [@n],
                             '' [@v] FOR XML PATH('S'),
                             TYPE
                  ),
                  (
                      SELECT N'Имя' [@n],
                             '' [@v] FOR XML PATH('S'),
                             TYPE
                  )
                  
                  
                  
                  FOR XML PATH('P'),
                  TYPE
       ),
       (
           SELECT N'Поля платежа' [@n],
                  2 [@r] FOR XML PATH('P'),
                  TYPE
       )
       
       FOR XML PATH('P'),
       ROOT('u:UBS_TRANSFER');



вывод получается таким :)

<u:UBS_TRANSFER xmlns:u="http://ubs/system/base">
  <P n="UbsParam" r="3">
    <P xmlns:u="http://ubs/system/base" n="Плательщик" r="2">
      <S xmlns:u="http://ubs/system/base" n="Фамилия" v="" />
      <S xmlns:u="http://ubs/system/base" n="Имя" v="" />
    </P>
    <P xmlns:u="http://ubs/system/base" n="Поля платежа" r="2" />
  </P>
</u:UBS_TRANSFER>
9 авг 16, 09:49    [19518776]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить