Générer du XML à partir de texte en Java

Signaler
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
-
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
-
Bonjour, voila je suis plutot expert en XML mais pas en java, je dois à partir d'un fichier texte de cette forme :
"balise valeur/ balise2 valeur2/ etc..."

Créér le fichier XML sous la forme :
<?xml version=1.0?>
<root>
valeur
valeur2 etc...
</root>

Je dois le faire en Java, pourriez vous m'aider ?
Merci

13 réponses

Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
Salut,
il te faut recuperer le contenu de ton fichier dans un string puis tu l'eclates :
//si la chaine de caractères se nomme text :
String xml = "<?xml version=1.0?>\n<root>\n\t";
// on éclate la chaine sur les /
String[] valeurs = text.split("/");
//ensuite on refait pareil sur " "
for (int i = 0 ; i < valeurs.lenght() ; i++)
{
     String[] contenu = valeurs[i].split(" ");
     // on ajoute la balise et la valeur au xml
     xml += "<"+contenu[0]+">+contenu[1]+"</"+contenu[0]+">\n";
      // si on est pas sur le dernier on rajoute une tabulation
      if (i+1 != valeurs.length())
          xml += "\t";
}
// on ferme le xml
xml += "</root>";
//et il ne reste plus qu'a écrire dans un fichier


Duss
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
Merci bien, par ailleurs le fichier texte initial peut etre trés imposant, dois je le faire calculer ligne par ligne et si oui comment?
Comment on ecrit dans un fichier?
Merci pour ton aide
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
Salut,
pour lire ton fichier ligne par ligne :
File fichier = new File("chemin du fichier");
BufferedReader in = new BufferedReader(new FileReader(fichier));
String ligne;
String xml = "<?xml version=1.0?>\n<root>\n\t";
while( (ligne = in.readLine()) != null)
{
    // ici tu fais ton traitement
    // on éclate la chaine sur les /
  String[] valeurs = text.split("/");
  //ensuite on refait pareil sur " "
  for (int i = 0 ; i < valeurs.lenght() ; i++)
  {
      String[] contenu = valeurs[i].split(" ");
      // on ajoute la balise et la valeur au xml
     xml += "<"+contenu[0]+">+contenu[1]+"</"+contenu[0]  +">\n\t";
   }
}
in.close();
// on vire la derniere tabulation
xml = xml.subString(0,xml.length - 1);
// on ferme le xml
xml += "</root>";
//et il ne reste plus qu'a écrire dans un fichier
FileOutputStream out = new FileOutputStream("chemin du nouveau fichier");
out.write(xml.getBytes());
out.close();

et le tour est joué ... :big)
Duss
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
:-), si j'ai bien compris il ne me reste qu' à rajouter mes bibliothèques et la classe.
Merci beaucoup !
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
Une dernière question... (je sais je suis mauvais en java, moi à part le xml...)
La fonction split que tu appelles n'existe pas ou fait partie d'une bibliothèque, dans le cas ou je dois la créé, je dois utiliser la classe StreamTokenizer ?

Désolé pour ma médiocrité mais faut bien que j'apprenne...lol
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
Effectivement, la fonction split fait partie de la classe string mais a partir de la version 1.4 du sdk
Si tu ne veux pas faire un upgrade, tu peux utiliser la classe StringTokenizer.
Duss
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
Qu'entends tu par "//ici tu fais ton traitement" ?
merci,
Pour cette fonction le pack java.io.* est il suffisant ?
Merci
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
AU SECOURS !!!
Désolé mais je bloque grave : voila mon code :
import java.io.*;

public class transcode {
 public static void main() {

    File fichier = new File("test.txt"); 
BufferedReader in = new BufferedReader(new FileReader(fichier)); 
String ligne; 
String xml = "<?xml version=1.0?>\n<request>\n\t"; 

while( (ligne = in.readLine()) != null) 
{ 
// traitement 
// on éclate la chaine sur les / 
String[] valeurs = ligne.split("/"); 
//ensuite on refait pareil sur " " 
for (int i=0 ; i<valeurs.length ; i++) 
{ 
String[] contenu = valeurs[i].split(" "); 
// on ajoute la balise et la valeur au xml 
xml += "<"+contenu[0]+">"+contenu[1]+"</"+contenu[0] +">\n\t"; 
} 
} 
in.close(); 
// on enleve la derniere tabulation 
//xml = xml.subString(0,xml.length - 1); 
j'ai enlevé cette ligne car cela me généré une erreur je ne sais pas pourquoi
// on ferme le xml 
xml += "</request>"; 
//et il ne reste plus qu'a écrire dans un fichier 
FileOutputStream out = new FileOutputStream("test.xml"); 
out.write(xml.getBytes()); 
out.close(); 
 }
}


Ce qui me générent des erreurs du type unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
AU SECOURS !!!!!
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
ben c'est le traitement que j'ai mis !!
pour le package, StringTokenizer est dans java.util
Duss
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
Bon aprés avoir réviser mes extends de classe, mon code marche enfin ,seule le retrait de la tabulation me génère une erreur
import java.awt.*;
import java.io.*;

public class transcode {
public static void main(String [] args) 
    throws Exception { 

     if (args.length!=2) {
      System.out.println("You must specify two arguments");
       System.exit(0);
     }
File fichier = new File(args[0]); 
BufferedReader in = new BufferedReader(new FileReader(fichier)); 

String ligne; 
String xml = "<?xml version=1.0?>\n<request>\n\t"; 

while( (ligne = in.readLine()) != null) 
{ 
String[] valeurs = ligne.split("/"); 
for (int i=0 ; i<valeurs.length ; i++) 
{ 
String[] contenu = valeurs[i].split(" "); 
xml += "<"+contenu[0]+">"+contenu[1]+"</"+contenu[0] +">\n\t"; 
} 
} 
in.close(); 
// ICI ERREUR
xml = xml.subString(0,xml.length - 1); 
xml += "</request>"; 
FileOutputStream out = new FileOutputStream(args[1]); 
out.write(xml.getBytes()); 
out.close(); 
 }
}

Tous marche (merci beaucoup à toi) sauf le petit retrait, qui me génére une erreur lors de la compilation (mais si je le retir tout marche bien à part la dernière tabulation)
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
C'est bon je me suis débrouillé en mettant les \t devant au lieu de derriere donc ca marche.
Merci à toi !
(Je suis loin d avoir fini donc attend toi à ce que je te repose d autres questions ;-)
Messages postés
51
Date d'inscription
mardi 4 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2004
1
Resalut, j'ai encore un probleme, je souhaiterais maintenant rajouter une balise xml en fonction de la valeur des contenu que je recois, par exemple si j'ai contenu[0] = bibi, alors rajouter enplus la balise baba.
Le probleme est que en rajoutant ca dans le code cela ne marche pas.. ou est mon erreur ?

...
for (int i=0 ; i<valeurs.length ; i++)
{
String[] contenu = valeurs[i].split(" ");

//ERREUR ICI, L EGALITE N EST PAS VERIFIEE
if (contenu[0]=="bibi"){ xml += "\t test ";}

xml + = "\t<"+contenu[0]+">"+contenu[1]+"</"+contenu[0] +">\n";
}
}
...

Merci
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
en fait tu ne peux pas te servir de = = avec un string, il faut se servir de equals :
...
for (int i=0 ; i<valeurs.length ; i++) 
{ 
String[] contenu = valeurs[i].split(" "); 

//ERREUR ICI, L EGALITE N EST PAS VERIFIEE
if (contenu[0] .equals("bibi") ){ xml + = "\ttest";}

xml += "\t<"+contenu[0]+">"+contenu[1]+"</"+contenu[0] +">\n"; 
} 
} 
...