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

darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 - 4 mars 2003 à 12:13
cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 - 7 mars 2003 à 10:12
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

cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
4 mars 2003 à 14:08
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
0
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
4 mars 2003 à 14:34
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
0
cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
4 mars 2003 à 22:17
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
0
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
4 mars 2003 à 23:40
:-), si j'ai bien compris il ne me reste qu' à rajouter mes bibliothèques et la classe.
Merci beaucoup !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
4 mars 2003 à 23:50
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
0
cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
5 mars 2003 à 08:55
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
0
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
5 mars 2003 à 10:09
Qu'entends tu par "//ici tu fais ton traitement" ?
merci,
Pour cette fonction le pack java.io.* est il suffisant ?
Merci
0
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
5 mars 2003 à 11:13
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 !!!!!
0
cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
5 mars 2003 à 11:14
ben c'est le traitement que j'ai mis !!
pour le package, StringTokenizer est dans java.util
Duss
0
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
5 mars 2003 à 11:51
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)
0
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
5 mars 2003 à 12:02
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 ;-)
0
darktonight Messages postés 51 Date d'inscription mardi 4 mars 2003 Statut Membre Dernière intervention 23 juillet 2004 1
5 mars 2003 à 14:03
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
0
cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
7 mars 2003 à 10: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"; 
} 
} 
...
0