2010-10-06 5 views
1
<category> 
    <catid>1</catid> 
    <cattext> sport </cattext> 
</category> 

Je veux changer le texte de l'élément <cattext> dans un autre comme "l'art" au lieu du sport en utilisant XQueryvaleur de changement de l'élément par XQuery

+0

Quelle base de données utilisez-vous? Ou probablement vous voulez juste transformer? – Shcheklein

Répondre

1
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(/*) 

Sortie:

<?xml version="1.0" encoding="UTF-8"?> 
<category> 
    <catid>1</catid> 
    <cattext>art</cattext> 
</category> 
1

si votre moteur prend en charge les mises à jour et les scripts:

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

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

ou si vous ne voulez pas persister les changements que vous pouvez transformer une copie:

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 

ces extraits de code exécuté avec succès sur http://try.zorba-xquery.com

Si votre processeur XQuery ne supporte pas les mises à jour de la solution de Alejandro Haut.

Questions connexes