Le mysql
La commande peut sortir XML directement, en utilisant le - -xml
option, qui est disponible au moins depuis MySql 4.1.
Cependant, cela ne vous permet pas de personnaliser la structure de la sortie XML. Il affichera quelque chose comme ceci :
<?xml version="1.0"?>
<resultset statement="SELECT * FROM orders" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<field name="emp_id">129</field>
<field name="cust_id">107</field>
<field name="region">Eastern</field>
</row>
</resultset>
Et vous voulez :
<?xml version="1.0"?>
<orders>
<employee emp_id="129">
<customer cust_id="107" region="Eastern"/>
</employee>
</orders>
La transformation peut être effectuée avec XSLT en utilisant un script comme celui-ci :
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="resultset">
<orders>
<xsl:apply-templates/>
</orders>
</xsl:template>
<xsl:template match="row">
<employee emp_id="{field[@name='emp_id']}">
<customer
cust_id="{field[@name='cust_id']}"
region="{field[@name='region']}"/>
</employee>
</xsl:template>
</xsl:stylesheet>
C'est évidemment beaucoup plus verbeux que la syntaxe MSSQL concise, mais d'un autre côté, c'est beaucoup plus puissant et peut faire toutes sortes de choses qui ne seraient pas possibles dans MSSQL.
Si vous utilisez un processeur XSLT de ligne de commande tel que xsltproc
ou saxon
, vous pouvez diriger la sortie de mysql
directement dans le programme XSLT. Par exemple :
mysql -e 'select * from table' -X database | xsltproc script.xsl -