Transformation XML Xquery via saxon9
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:
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:
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:
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:
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.