Bonjour,

je cherche à faire une transformation XML -> XML par xquery/saxon9. L'idée est juste ici de mapper des données du XML d'entrée vers le XML de sortie. Le problème que je rencontre est qu'en sortie, j'obtiens le document XML souhaité (la xquery a bien été executé) sauf que les fonctions xquery n'ont pas été executées.

Le code java :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
public static void main(String[] args) {
	try {
 
            Configuration config = new Configuration();
            StaticQueryContext staticContext = new StaticQueryContext(config);
 
            InputStream queryStream = new FileInputStream("xqueries\\Prototype.xq");
            XQueryExpression exp = staticContext.compileQuery(queryStream, null);
            DynamicQueryContext dynamicContext = new DynamicQueryContext(config);
 
            DocumentInfo d = staticContext.buildDocument(new StreamSource(new File("D:\\workspace\\saxon9\\Tests\\xml\\livre.xml"))).getDocumentRoot();
 
            dynamicContext.setContextItem(d);
 
            StringWriter wr = new StringWriter();
 
            exp.run(dynamicContext,new StreamResult(wr),null);
 
            System.out.println(wr.getBuffer().toString());
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }
}
La xquery (prend un document de type livre en entrée et construit un document de type auteur) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
declare namespace xf = "http://test.bidon/Prototype/";
declare namespace kiyo = "java:rdg.ReglesGestion";
declare namespace liv = "http://test.bidon/livre";
declare namespace aut = "http://test.bidon/auteur";
 
declare function xf:Prototype($input as element(liv:livre))
    as element(aut:auteur) {
    	<aut:auteur>
    		<aut:nom>data($input/liv:nomAuteur)</aut:nom>
    		<aut:prenom>data($input/liv:prenomAuteur)</aut:prenom>
    		<aut:commentaire>kiyo:rdgTestParam(kiyo:new(), data($input/liv:nomAuteur), data($input/liv:prenomAuteur))</aut:commentaire>
    	</aut:auteur>
};
 
declare variable $input as element(liv:livre) external;
 
xf:Prototype($input)
Le document de type livre en entrée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
<livre xmlns:liv="http://test.bidon/livre">
    <titre xmlns:liv="http://test.bidon/livre">Au clair de mars</titre>
    <editeur xmlns:liv="http://test.bidon/livre">Les Editions</editeur>
    <nomAuteur xmlns:liv="http://test.bidon/livre">Dupont</nomAuteur>
    <prenomAuteur xmlns:liv="http://test.bidon/livre">Jean</prenomAuteur>
</livre>
Le document de type auteur en sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
<?xml version="1.0" encoding="UTF-8"?>
<aut:auteur xmlns:aut="http://test.bidon/auteur">
   <aut:nom>data($input/liv:nomAuteur)</aut:nom>
   <aut:prenom>data($input/liv:prenomAuteur)</aut:prenom>
   <aut:commentaire>kiyo:rdgTestParam(kiyo:new(), data($input/liv:nomAuteur), data($input/liv:prenomAuteur))</aut:commentaire>
</aut:auteur>
Come on le voit, data($input/liv:nomAuteur) et consors n'ont pas été executées...

Merci de votre aide.