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.

Réponse XML de l'API Mégalis
La structure du document détermine à elle seule les colonnes produites

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.

Onglet Paramètres du traitement Import XML
Les deux seuls champs propres au plugin

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.

Le jeu de données produit
18 enregistrements et 20 colonnes issues de l'aplatissement du XML

Si vous avez des remarques sur ce cours, n'hésitez pas à nous les communiquer.