2010-12-07 48 views
0

J'ai essayé d'assigner des valeurs aux éléments d'un xml entrant (à partir d'une file d'attente) en utilisant xquery. Le xml à venir est de la formeDéfinir la valeur constante avec XQuery

<header><a></a><b></b><c></c></header>

je dois les mettre avec des valeurs constantes pour le système cible:

<header><a>1</a><b>2</b><c>3</c></header>

Toutes les idées?

+0

Vous oubliez de dire quelle est la logique derrière ces valeurs "constantes". –

+0

Comme je l'ai dit, le système cible attend son propre traitement interne. Je travaille essentiellement sur le middleware avec l'application mainframe d'un côté et l'application Java sur l'autre – hakish

+0

si vous utilisez Saxon, alors vous pouvez appeler dans votre expression XQuery la fonction d'extension 'saxon: transform()' afin que la transformation requise être effectué dans une transformation XSLT mais dans le cadre d'une évaluation XQuery contenant. –

Répondre

1

Je ne sais pas si je comprends parfaitement votre question, mais je suppose que vous voulez copier l'entrée et modifier certains éléments. Ce serait plus facile avec XSLT. Pour cela, dans XQuery, vous voulez une fonction récursive qui regarde chaque nœud, le modifie le cas échéant, et copie la sortie. D'après votre description, je suppose que votre entrée est constituée uniquement de nœuds d'éléments, et c'est donc le seul cas que j'ai considéré:

declare function local:apply($node as element()) 
{ 
    typeswitch ($node) 
    case element(a) return <a>1</a> 
    case element(b) return <b>2</b> 
    case element(c) return <c>3</c> 
    default return element {name($node)} {local:apply($node/*)} 
}