通过xquery更改元素的值

时间:2010-10-06 16:11:06

标签: xml xquery

<category>
     <catid>1</catid>
     <cattext> sport </cattext>
</category>

我想通过使用xquery

将元素<cattext>的文本更改为另一个像“art”而不是sport的文本

2 个答案:

答案 0 :(得分:2)

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 :(得分:1)

如果您的引擎支持更新和脚本:

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处理器不支持更新,那么Alejandro的解决方案是最好的。