Eclydre Web Manager > Développeur > Les outils > Génération de fichiers XML

Génération de fichiers XML

tools/generateXML.php

L'outil de génération XML permet de générer des fichiers XML directement à partir d'un modèle XML.

Paramètres d'appel

 modele  nom du modèle XML, doit être dans le dossier xml/ et avoir été déclaré dans le module d'administration / configuration / modèls XML
 output  nom du fichier à générer dans userdata/xml ou stdout pour une sortie écran ou direct (header content-type text/xml)
info
tableau de valeurs par défaut à communiquer au modèle XML

Exemple de modèle XML

< ?xml version="1.0" encoding="utf-8"?>
< rss version="2.0" xmlns:dt="http://xsltsl.org/date-time">
    < channel>
        < title>php:getlt('rss_news_title', $_REQUEST['langue'])< /title>
        < link>php:getlt('rss_news_link', $_REQUEST['langue'])< /link>
        < description>php:getlt('rss_news_description', $_REQUEST['langue'])< /description>
        < copyright>php:getlt('rss_news_copyright', $_REQUEST['langue'])< /copyright>
        < language>fr< /language>

        < pubdate>php:date('r')< /pubdate>
        < lastbuilddate>php:date('r')< /lastbuilddate>
        < image>
            < link>php:getlt('rss_news_link', $_REQUEST['langue'])< /link>
            < url>http://www.inrap.fr/template/medias/logo_inrap.gif< /url>
            < title>php:getlt('rss_news_title', $_REQUEST['langue'])< /title>
        < /image>
        < ttl>240< /ttl>
        < items xfake="1" xtype="liste" xvalue="sql:SELECT * FROM c_page WHERE bRSS=1 AND status ORDER BY tstamp DESC LIMIT 0, 15">
        < item>
            < title>php:strip_html($info['nom'])< /title>
            < description>php:strip_html($info['texte'])< /description>
            < pubdate>php:date('r', strtotime($info['tstamp']))< /pubdate>
            < link>php:doLink( array( 'c_page_id'=>$info['id']), '', '', '', 1)< /link>
        < /item>
        < /items>
    < /channel>
< /rss>

La syntaxe du modèle

 php:  appel de code php
 #[field]#  appel de la variable parente ($info) $field
sql: exécute la requête sql
tag_all_fields
génére un tag pour chaque colonne de l'enregistrement en cours ($inpo)
xfake=1
la tag en cours ne sera pas restitué dans l'XML final
xtype=liste
le tag en cours contient des infos qui devront être répétées en fonction du tableau xvalue
xvalue
 tableau des lignes à insérer dans l'XML :
sql : depuis une requête
tab : depuis un tableau php
DBs: depuis un DB
php: depuis un appel php
XLF: export XLIFF depuis un DB
$info
tableau des valeurs de la ligne en cours

eg. export des données MySQL sur les gabarits HTML

generateXML.php?modele=g_gabarit.xml&output=stdout&info[id]=1,2,3

< ?xml version="1.0" encoding="utf-8"?>
< gabarits xtype="liste" xvalue="sql:select * from g_gabarit where id in (#[id]#)">
    < gabarit >
        tag_all_fields
        < zones xfake="1" xtype="liste" xvalue="sql:select * from g_gabarit_zone where g_gabarit_id='#[id]#'">
            < zone>
                tag_all_fields
                < types xfake="1" xtype="liste" xvalue="sql:select t.* from g_gabarit_zone_type gt, c_type t where g_gabarit_zone_id='#[id]#' and c_type_id=t.id">
                    < type>
                        tag_all_fields
                    < /type>
                < /types>                
            < /zone>
        < /zones>
    < /gabarit>
< /gabarits>

pré et post génération

Il est possible d'inclure un traitement php avant et après la génération XML pour initialiser des valeurs, includre des fonctions, etc.

Pour cela créer dans le dossier xml/ un fichier :
nom_modele.xml.php pour la pré-production
output.nom_modele.xml.php pour la post-production

Génération sans tabulation à placer en pré-production:
$GLOBALS['config']['generatexml_noindent'] = 1;