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;
/**
*
- 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());
}
}
}
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.