Configurer un traitement Import XML
Le plugin Import XML télécharge un document XML à une adresse HTTP, aplatit sa structure arborescente en colonnes, puis publie le résultat dans un jeu de données. Ce cours le configure sur la salle des marchés de Mégalis Bretagne pour récupérer les marchés publics d'une collectivité — une source dont les éléments sont imbriqués sur trois niveaux, ce qui rend la mécanique d'aplatissement bien visible.
💡 Ce cours ne décrit que ce qui est propre à ce plugin. Pour la mécanique commune à tous les traitements — créer un traitement, choisir l'action, planifier, suivre les exécutions, gérer les permissions et les notifications — consultez le cours Programmer des mises à jour automatiques de données.
1. Explorer l'API source
Avant de configurer quoi que ce soit, il faut connaître l'adresse exacte qui renvoie le XML, et la forme de ce XML. Le plugin ne demande aucun mapping : c'est la structure du document qui détermine, à elle seule, les colonnes du jeu de données.
1.1 Construire la requête
Les données de la commande publique de la salle des marchés de Mégalis Bretagne sont exposées par une API décrite dans sa documentation, section decp.
La requête prend deux paramètres dans le chemin — le SIREN de la collectivité et l'année :
https://data-api.megalis.bretagne.bzh/api/v1/decp/{siren}/{annee}
Dans ce cours, nous interrogeons le Golfe du Morbihan – Vannes agglomération (SIREN 200067932) pour l'année 2024, ce qui donne 18 marchés :
https://data-api.megalis.bretagne.bzh/api/v1/decp/200067932/2024
⚠️ L'API répond 200 même lorsqu'elle n'a rien à renvoyer : le document est alors réduit à <marches/>. Si votre traitement produit un jeu de données vide, essayez une autre année avant de suspecter la configuration.
1.2 Lire la structure du XML
Ouvrez le document renvoyé et regardez comment il est bâti — c'est là que se joue tout le reste.
L'élément répété [1]. <marche> revient autant de fois qu'il y a de marchés, sous une racine <marches>. Le plugin repère ce niveau répété : une occurrence donnera une ligne du jeu de données.
Les sous-éléments [2]. <acheteur> n'est pas une valeur mais un bloc, qui contient lui-même <id> et <nom>.
Les niveaux profonds [3]. <titulaires> contient <titulaire>, qui contient à son tour trois balises : l'arbre descend ici jusqu'au troisième niveau.
Il n'y a rien à déclarer : le plugin déplie tout ce qu'il rencontre.
2. Configuration
Le formulaire du plugin tient en deux onglets. Le premier, Jeu de données, est commun à tous les traitements et décrit dans le cours générique. Seul l'onglet Paramètres est propre à l'import XML, et il ne compte que deux champs.
2.1 L'adresse de la source
Le champ l'Url d'accès aux données sources (source xml) [1] reçoit l'adresse complète construite à l'étape 1.1, paramètres compris.
Le plugin effectue un simple appel HTTP, sans authentification : il n'offre ni clé d'API, ni identifiants. Si votre source est protégée, ce plugin ne conviendra pas.
2.2 Le séparateur de colonne
Le champ Le séparateur de colonne [2] est le cœur du plugin. C'est lui qui assemble les noms des balises imbriquées pour former le nom d'une colonne :
| Dans le XML | Colonne produite |
|---|---|
<acheteur> › <nom> |
acheteur/nom |
<lieuExecution> › <typeCode> |
lieuExecution/typeCode |
<titulaires> › <titulaire> › <denominationSociale> |
titulaires/titulaire/denominationSociale |
Avec /, le chemin d'origine se lit d'un coup d'œil. Choisissez un caractère qui n'apparaît pas dans les noms de vos balises.
⚠️ Malgré son intitulé, ce champ n'est pas le séparateur du fichier CSV produit — celui-ci reste la virgule. Il ne sert qu'à composer les noms de colonnes.
3. Résultat
Les 18 marchés deviennent 18 enregistrements [1] et l'arbre XML est intégralement déplié en 20 colonnes [2], sans qu'aucune correspondance ait eu à être saisie. Les colonnes issues de balises imbriquées portent leur chemin complet : acheteur/nom, lieuExecution/typeCode, titulaires/titulaire/denominationSociale.
Le jeu de données se comporte ensuite comme n'importe quel autre : les types sont détectés automatiquement (nombres, dates), et vous pouvez le filtrer, l'exposer ou construire des visualisations dessus.
Si vous avez des remarques sur ce cours, n'hésitez pas à nous les communiquer.