powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath modify, SQL Server 2005
10 сообщений из 10, страница 1 из 1
XPath modify, SQL Server 2005
    #34261121
SergeySh111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрые сутки! Очень нужна ваша помощь! Немогу разобраться с сиуацией...

Есть xml следующего вида:

<?xml version="1.0" ?>
<Transaction type="simulateOrder">
<OBJECT name="XMLContainerDataObject">

<ATTRIBUTE name="ErrorCode" access="rw" id="">ERROR_UNDEFINED</ATTRIBUTE>

<OBJECT name="Order">
<ATTRIBUTE name="SupplierOrderId" />

<OBJECT name="ResultRelationCustomer">
<ATTRIBUTE name="BuyerId">999999</ATTRIBUTE>
</OBJECT>

</OBJECT>

</OBJECT>
</Transaction>


Необходимо XPath запросом modify заменить значение узла ATTRIBUTE name="BuyerId" (т.е. 999999, например на 1).

т.е выбрать значение я могу
select @BuyerId= Convert(varchar(MAX),@xml.query('for $b in OBJECT//ATTRIBUTE where $b/@name="BuyerId" return $b/text()')), но чтобы зделать modify, мне нужно точно адресовать узел, а как это сделать - нипойму :(...

Буду рад любому совету! Зараннее спасибо!
...
Рейтинг: 0 / 0
XPath modify, SQL Server 2005
    #34262730
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergeySh111Добрые сутки! Очень нужна ваша помощь! ...
... Необходимо XPath запросом modify заменить значение узла ATTRIBUTE name="BuyerId" (т.е. 999999, например на 1).


[SRC=sql]DECLARE @myDoc xml
SET @myDoc = '<?xml version="1.0" ?>
<Transaction type="simulateOrder">
<OBJECT name="XMLContainerDataObject">
<ATTRIBUTE name="ErrorCode" access="rw" id="">ERROR_UNDEFINED</ATTRIBUTE>
<OBJECT name="Order">
<ATTRIBUTE name="SupplierOrderId" />
<OBJECT name="ResultRelationCustomer">
<ATTRIBUTE name="BuyerId">999999</ATTRIBUTE>
</OBJECT>
</OBJECT>
</OBJECT>
</Transaction>'
SELECT @myDoc
SET @myDoc.modify('
replace value of (//OBJECT/ATTRIBUTE[@name="BuyerId"]/text())[1]
with "1"
')
SELECT @myDoc
[/SRC]
...
Рейтинг: 0 / 0
XPath modify, SQL Server 2005
    #34262810
SergeySh111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
XPath modify, SQL Server 2005
    #34341674
S_tetka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня тоже проблема с изменением значения. Есть приблизительно такая структура:
Код: plaintext
1.
2.
3.
4.
5.
6.
declare @xml xml
select @xml = '<book category="COOKING">
	<title lang="en">Everyday Italian</title>
	<author>Giada De Laurentiis</author>
	<year/>
	<price> 30 . 00 </price>
</book>
Хочу в пустое year положить значение вот так:
Код: plaintext
set @xml.modify('replace value of (book/year/text())[1] with "2005"')
После этой команды делаю select @xml.query('book[1]') И ничего не изменилось. Это получается, что я не могу изменять "пустые" значения? Надо удалять данную ветку и вставлять ее уже со значением? Как-то геморройно получается...
...
Рейтинг: 0 / 0
XPath modify, SQL Server 2005
    #34342948
S_tetka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Действительно, тут http://msdn2.microsoft.com/en-us/library/ms190675.aspx говорят, что для замены нужно обязательно какое-то значение и если значения нет, то ничего не изменится и ошибка не вызовется. Получается, что вообще никак нельзя изменить пустое значение, только через удаление пустого элемента и добавление его копии, но уже со значением? Как-то некрасиво, чтобы быть правдой :(
...
Рейтинг: 0 / 0
XPath modify, SQL Server 2005
    #34343282
SuSa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
немного не на том парсере, но может быть сможешь переделать под себя
<xsl:template match="//yar">
<xsl:if test="string-length(text()) =0">
<xsl:element name="yar">
<xsl:text>2005</xsl:text>
</xsl:element>
</xsl:if>
</xsl:template>
...
Рейтинг: 0 / 0
XPath modify, SQL Server 2005
    #34350066
S_tetka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Увы, мне так не подойдет. Синтаксис не пускает. :(
...
Рейтинг: 0 / 0
XPath modify, SQL Server 2005
    #34353330
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_tetka... Получается, что вообще никак нельзя изменить пустое значение, только через удаление пустого элемента и добавление его копии, но уже со значением? Как-то некрасиво, чтобы быть правдой :(

Не стоит выдумывать извращения на пустом месте (удалять, вставлять копии), достаточно просто уяснить себе суть происходящих действий:
1. у вашего узла year нет дочерних узлов типа text(), поэтому и заменять командой replace нечего (поэтому и при выполнении метода modify() ничего не происходит);
2. достаточно использовать команду insert типа так:
Код: plaintext
1.
2.
3.
set @xml.modify('insert text{"2005"} into (book/year)[1]')
-- или так, чтобы "лишний раз" удостовериться в пустоте узла year
set @xml.modify('insert text{"2005"} into (book/year[not(text())])[1]')
...
Рейтинг: 0 / 0
XPath modify, SQL Server 2005
    #34357638
S_tetka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну спасибо за "извращения", но не я же их придумала. Меня как раз и возмути. А предложеного Вами способа в ОФИЦИАЛЬНЫХ документациях нет (например, на том же http://msdn2.microsoft.com). Кстати, может подскажите, где можно почитать более полное описание функционала?
...
Рейтинг: 0 / 0
XPath modify, SQL Server 2005
    #34358102
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
S_tetkaНу спасибо за "извращения", но не я же их придумала. Меня как раз и возмути. А предложеного Вами способа в ОФИЦИАЛЬНЫХ документациях нет (например, на том же http://msdn2.microsoft.com). Кстати, может подскажите, где можно почитать более полное описание функционала?

Опять выдумываете то, чего на самом деле нет: "... предложеного Вами способа в ОФИЦИАЛЬНЫХ документациях нет ...", а откуда же я по вашему его взял?
Вот - практически весь раздел выше по иерархии от конкретного метода SQL Server 2005 Books Online ...
insert (XML DML)

Обидчивость, конечно, дело хорошее (про "извращения" там посетовать и все-такое, извините, если задело), но лучше для дела ее все-таки будет заменить, хотя бы, "усидчивостью" при чтении документации...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath modify, SQL Server 2005
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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