Récupérer des données FrontBase en XML
Par Michel Billaud, mercredi 2 juin 2010 à 13:43 :: Bidouilles :: #61 :: rss
L'autre jour j'ai installé FrontBase pour y recharger des données (dont j'avais un backup), histoire de pouvoir les extraire dans un format plus exploitable. J'ai découvert que ça pouvait se faire en format XML, moyennant un toilettage du résultat. Et bien voila.
Exporter les données
On commence par créer un fichier de commandes SQL qui exporte les données en XML
-- export.sql connect to mabase user toto ; set format xml ; -- clients set output clients.xml ; select * from monschema.client ; -- produits set output produits.xml ; select * from monschema.produits ; -- etc
et on le lance
sql92 export.sql
Y a un problème
Félicitations, vous êtes maintenant l'heureux propriétaire d'un lot de fichiers qui contiennent vos données en XML. Enfin, XML à la sauce FrontBase, parce que ça commence par une définition de schéma
<xsd:schema xmlns:xsd="http://www.w3.org/2000/08/XMLSchema"> ... </xsd:schema>
avant d'arriver à quelque chose qui ressemble à ce que vous vouliez
<?xml version="1.0"?> <results> <result> <ID_CLIENT>42</ID_CLIENT> ...
et même qu'en y regardant de plus près, il y a dans le fichiers plusieurs lots du genre
<?xml version="1.0"?> <results> .... </results>
Et pendant qu'on y est, les fins de lignes sont du type CR-LF, ce qui heurte quelque peu le bon goût unixien.
Pas de problèmes que des solutions
Ca s'arrange facilement, avec un petit script, pour enlever les trucs en trop (et en remettre un peu)
# # conversion fichier XML généré par FrontBase # # terminateurs CRLF -> unix # balises <results> intempestives # balises <?xml ?> # ( echo "<?xml version='1.0' ?>" echo "<results>" sed -e 's/\x0D//' \ -e '1,/<?/d' \ -e "/<results>/d" \ -e "/<.results>/d" \ -e "/<?xml/d" \ $1 echo "</results>" ) > $1.ok
à qui on donne en paramêtre le nom d'un fichier (par exemple clients.xml
) et qui fabrique
un fichier clients.xml.ok
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.