изменить значение элемента с помощью xquery - PullRequest
1 голос
/ 06 октября 2010
<category>
     <catid>1</catid>
     <cattext> sport </cattext>
</category>

Я хочу изменить текст элемента <cattext> на другой, например "art" вместо sport, используя xquery

Ответы [ 2 ]

2 голосов
/ 07 октября 2010
declare namespace local = "http://example.org";  
declare function local:copy-replace($element as element()) {  
  if ($element/self::cattext)
  then <cattext>art</cattext>
  else element {node-name($element)}  
               {$element/@*, 
                for $child in $element/node()  
                return if ($child instance of element())  
                       then local:copy-replace($child)  
                       else $child  
               }  
};  
local:copy-replace(/*)

Выход:

<?xml version="1.0" encoding="UTF-8"?>
<category>
     <catid>1</catid>
     <cattext>art</cattext>
</category> 
1 голос
/ 07 октября 2010

если ваш движок поддерживает обновления и скрипты:

declare variable $x := 
   <category>
     <catid>1</catid>
     <cattext> sport </cattext>
   </category>;

replace value of node $x/cattext with "art";
$x;

или если вы не хотите сохранять изменения, вы можете преобразовать его копию:

let $x := 
   <category>
     <catid>1</catid>
     <cattext> sport </cattext>
   </category>
return
   copy $changedx := $x
   modify (replace value of node $changedx/cattext with "art")
   return $changedx 

этот кодфрагменты успешно работают на http://try.zorba -xquery.com

Если ваш процессор XQuery не поддерживает обновления, решение Алехандро является лучшим.

...