Génération de fichier xml

Contenu du snippet

Cette classe permet de générer des fichiers XML à partir d'une requête
sql SELECT portant sur une seule table.

Le fichier aura une dtd interne et cette structure :
<database>
<table id="?">
<champ1 type="java.sql.Types">valeur</champ1>
<champ2 type="java.sql.Types">valeur</champ2>
...
</table>
<table id="?">
....
</table>
.....
</database>

Ps : je me sert du DbManager que vous pourrez trouver ici :
http://www.javafr.com/article.aspx?Val=153

Source / Exemple :


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

/**

  • @author Duss
*
  • Classe permettant de générer des fichiers Xml
  • a partir d'une requete SELECT * FROM table [WHERE condition]
  • /
public class XmlMaker { public static void make(String query) { // Objet DbManager cf : http://www.javafr.com/article.aspx?Val=153 DbManager dbm = new DbManager(); dbm.connect(); try { //Récupération du nom de la table String tableName; String[] split = query.split(" "); int i; for (i = 0 ; i<split.length ; i++) { split[i] = split[i].toLowerCase(); if (split[i].equals("from")) break; } tableName = split[i+1]; // Récupération des métadonnées ResultSet rs = dbm.getQuery(query); ResultSetMetaData meta = rs.getMetaData(); //Création du fichier File toMake = new File(tableName+".xml"); toMake.createNewFile(); // Instanciation du flux d'écriture FileOutputStream out = new FileOutputStream(toMake); int colCount = meta.getColumnCount(); String[] colNames = new String[colCount]; int[] colTypes = new int[colCount]; String cols = ""; // Récupération des noms des colonnes et de leur type for (i = 0 ; i< colCount ; i++) { colNames[i] = meta.getColumnName(i+1); colTypes[i] = meta.getColumnType(i+1); if (i>0) cols += colNames[i]; if (i>0 && i+1 < colCount) cols += ","; } // Confection du fichier String xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone='yes'?>\n"; xml += "<!DOCTYPE database [ \n"; xml += "\t<!ELEMENT database ("+tableName+"+)>\n"; xml += "\t\t<!ELEMENT "+tableName+" ("+cols+")>\n"; xml += "\t\t<!ATTLIST "+tableName+" "+ colNames[0] +" CDATA #REQUIRED>\n"; for (i = 1 ; i< colCount ; i++) { xml += "\t\t\t<!ELEMENT "+colNames[i]+" (#PCDATA)>\n"; xml += "\t\t\t<!ATTLIST "+colNames[i]+" type CDATA #REQUIRED>\n"; } xml += "]>\n"; xml += "<database>\n"; rs.beforeFirst(); while (rs.next()) { xml += "\t<"+tableName+" "+colNames[0]+"=\""+rs.getObject(1)+"\">\n"; for (i = 1 ; i< colCount ; i++) { xml += "\t\t<"+colNames[i]+" type=\""+colTypes[i]+"\">"+ rs.getObject(i+1)+"</"+colNames[i]+">\n"; } xml += "\t</"+tableName+">\n"; } xml += "</database>"; // Ecriture et fermeture out.write(xml.getBytes()); out.close(); } catch (SQLException e) { System.out.println("sql : "+e.getMessage()); } catch (IOException e) { System.out.println("io : "+e.getMessage()); } } }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.