Какова цель text () в этом xquery - PullRequest
1 голос
/ 02 марта 2012
update tbl_xml set mov_vcds.modify('replace value of(/videos/video/title/text())[1] with "Anbu"') 

без текста () мы можем использовать этот запрос ..

Ответы [ 2 ]

4 голосов
/ 02 марта 2012

text() указывает содержимое узла title. Без этого вы получите

Msg 2356, Level 16, State 1, Line 9
XQuery [tbl_xml.mov_vcds.modify()]: The target of 'replace value of' must be a non-metadata attribute or an element with simple typed content, found 'element(title,xdt:untyped) ?'

Так что вам это нужно.

2 голосов
/ 02 марта 2012

К сожалению, очень часто можно увидеть, что «text ()» используется таким образом в конце выражения пути, где он не нужен и иногда вреден.Обычно вы можете использовать сам узел элемента в тех контекстах, где вы ссылаетесь на содержимое элемента.Есть несколько исключений, например, в конструкторе элементов

<title>{title}</title>

и

<title>{title/text()}</title>

делают разные вещи (первое дает вам <title><title>original title</title></title>).Но в этом случае обычно лучше использовать title/string(), потому что он лучше справляется с вложенными комментариями, смешанным контентом и т. Д.

...