Il faut bien créer un fichier par document '$doc' à insérer dans la base.
Voici la requête exacte pour insérer le plan comptable dans la base à
partir du fichier Plan.xml. La structure des données est modifiée et
directement insérée dans les fichiers de la base de données :
let $pcg := doc('/db/Plan.xml')
for $account in $pcg/PCG/Compte
return
let $meta :=
<meta>
<doctype>org.openbluelab.financial.generalAccounting.Account</doctype>
<author>system</author>
<Account>
<number>{$account/num/text()}</number>
<name>{$account/name/text()}</name>
<Account>
<underAccount>{$account/treenodparent/text()}</underAccount>
</Account>
</Account>
</meta>
let $md5 := util:md5($meta)
let $doc :=
<document>
<docid>{$md5}</docid>
{$meta}
<versions/>
</document>
let $collection := '/db/openbluelab/demo.openbluelab.org'
return xmldb:store($collection, $md5, $doc)
Merci à l'équipe d'OpenBlueLab pour l'aide apportée ;-)
Myriam
Myriam a écrit :
> - <#> Bonjour,
>
> A partir d'un fichier XML basique contenant la liste des comptes du
> plan comptable général, je souhaiterais insérer ce plan comptable dans
> ma base de données eXist. Dans cette base, chaque compte sera un
> document à part entière (chaque compte ayant un "docid").
>
> Structure du fichier .xml en entrée :
>
> <PCG>
> <Compte>
> <num>0</num>
> <name>Plan comptable</name>
> <treenodparent />
> </Compte>
> <Compte>
> <num>1</num>
> <name>COMPTES DE CAPITAUX</name>
> <treenodparent>0</treenodparent>
> </Compte>
> ...
> </PGC>
>
>
> Voici la requête XQuery que j'ai écrite pour faire ces insertions, à
> partir de ce document (Plan.xml), après quelques remanipulations des
> données :
>
>
> let $pcg := doc('/db/Plan.xml')
>
> for $account in $pcg/PCG/Compte
>
> let $meta :=
>
> <meta>
>
> <doctype>org.openbluelab.financial.generalAccounting.Account</doctype>
>
> <author>init</author>
>
> <Account>
>
> <number>{$account/num/text()}</number>
>
> <name>{$account/name/text()}</name>
>
> <Account>
>
> <under-account>{$account/treenodparent/text()}</under-account>
>
> </Account>
>
> </Account>
>
> </meta>
>
> let $md5 := util:md5($meta)
>
>
> let $doc :=
>
> <document>
>
> <docid>{$md5}</docid>
>
> {$meta}
>
> <versions/>
>
> </document>
>
>
> return update insert $doc into
> collection('/db/openbluelab/demo.openbluelab.org')
>
>
> Ceci fonctionnerait-il correctement? Ne faut-il pas créer un fichier
> par $doc, et insérer ces fichiers dans la base?
>
>
> Merci d'avance.
>
> Myriam
>
>
>
>
>
>