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

Откуда: Украина, Харьков
Сообщений: 165
Доброго времени суток.
Прошу помочь, т.к. с XML в таком объеме не знаком.
23 апр 14, 16:04    [15923609]     Ответить | Цитировать Сообщить модератору
 Re: Множественный Modify XML переменной  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Доброго времени суток.
Прошу помочь, т.к. с XML в таком объеме не знаком.

Есть XML вида
declare @x xml
set @x=N'
<root>
	<element id="1">
		<subelement id="1">
			<element id="10"/>
			<element id="11"/>
			<element id="12"/>
		</subelement>
	</element>
	<element id="13"/>
	<element id="12"/>
</root>'

необходмио проапдейтить его так чтобы на выходе получился XML вида
declare @x xml
set @x=N'
<root>
	<element id="1">
		<subelement id="1">
			<element id="10" attrib1="true"/>
			<element id="11" attrib1="true"/>
			<element id="12" attrib1="true"/>
		</subelement>
	</element>
	<element id="13" attrib1="true"/>
	<element id="12" attrib1="true"/>
</root>'

Мне необходимо модифицировать только те узлы у которых нет детей.
Буду признателен за любые идеи.

Заранее благодарю.
23 апр 14, 16:07    [15923624]     Ответить | Цитировать Сообщить модератору
 Re: Множественный Modify XML переменной  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2791
SELECT convert(xml,REPLACE(convert(varchar(max),@x),'/>',' attrib1="true"/>'))
23 апр 14, 16:37    [15923898]     Ответить | Цитировать Сообщить модератору
 Re: Множественный Modify XML переменной  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Prolog
SELECT convert(xml,REPLACE(convert(varchar(max),@x),'/>',' attrib1="true"/>'))

Решение, конечно, "неожиданное",
НО
сейчас меня забью тапком, но как обычно все гораздо хуже.
Изначально данный атрибут уже стоит в некоторых узлах.
Т.е. в максимально приближенной к реальности версии это выглядит так:
declare @x xml
set @x=N'
<root>
	<element id="1">
		<subelement id="1">
			<element id="10" attrib1="true"/>
			<element id="11"/>
			<element id="12"/>
		</subelement>
	</element>
	<element id="13"/>
	<element id="12" attrib1="true"/>
	<complexType name="test1"/>
</root>'

Значения для атрибута Id тоже не уникально.
23 апр 14, 16:47    [15923972]     Ответить | Цитировать Сообщить модератору
 Re: Множественный Modify XML переменной  [new]
хмхмхм
Guest
Alexandr Kr.,


Ну тогда как-то так
SELECT convert(xml,replace(REPLACE(convert(varchar(max),@x), ' attrib1="true"/>', '/>'),'/>',' attrib1="true"/>'))
23 апр 14, 16:51    [15924005]     Ответить | Цитировать Сообщить модератору
 Re: Множественный Modify XML переменной  [new]
invm
Member

Откуда: Москва
Сообщений: 9396
declare @x xml
set @x=N'
<root>
	<element id="1">
		<subelement id="1">
			<element id="10" attrib1="true"/>
			<element id="11"/>
			<element id="12"/>
		</subelement>
	</element>
	<element id="13"/>
	<element id="12" attrib1="true"/>
    <complexType name="test1"/>
</root>';

while @x.exist('//element[empty(child::*) and empty(@attrib1)]') = 1
 set @x.modify('insert attribute attrib1 {"true"} into (//element[empty(child::*) and empty(@attrib1)])[1]');

select @x;
23 апр 14, 18:00    [15924556]     Ответить | Цитировать Сообщить модератору
 Re: Множественный Modify XML переменной  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
invm,

Благодарю. Именно такое и нужно было. Вопрос закрыт.
24 апр 14, 11:12    [15927496]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить