IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

mettre à jour un xml à partir d'une BD


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut mettre à jour un xml à partir d'une BD
    Bonjour,
    Je voudrais mettre à jour mon fichier xml à partir d'une BD.
    Est ce qu'il y a quelqu'un qui a une idée là dessus.

    Merci d'avance

  2. #2
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    je me suis peut être pas bien exprimé.

    Bon supposant que j'ai un fichier xml de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <root>
        <chapitre titre="Titre du chapitre 1">
            <partie titre="Titre de la partie 1">
                 Texte de la partie 1 du chapitre 1
            </partie>
            <partie titre="Titre de la partie 2">
                 Texte de la partie 2 du chapitre 1
            </partie>
        </chapitre>
     
        <chapitre titre="Titre du chapitre 2">
             <partie titre="Titre de la partie 1">
                 Texte de la partie 1 du chapitre 2
             </partie>
             <partie titre="Titre de la partie 2">
                 Texte de la partie 2 du chapitre 2
             </partie>
       </chapitre>
    </root>
    Alors supposons que j'ai une base de donnée qui contient 2 colonnes (chapitre, auteur).
    Alors le but c'est d'ajouter un attribut dans la balise chapitre du document xml un attribut qui contient le nom de l'auteur qui correspond au bon chapitre.

    Est ce qu'il y a quelqu'un qui a une idée là dessus. Merci d'avance

  3. #3
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    L'objectif c'est d'ajouter un attribut, dans la balise <chapitre>, qui correspond au nom de l'auteur.

    cad si pour une balise <chapitre> j'ai titre="Titre du chapitre 1" et que pour ce chapitre j'ai un auteur qui s'appelle titi ben le résultat est donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <chapitre titre="Titre du chapitre 1"; Auteur="titi">
    NB: J'aimerai bien traiter ce problème avec du java


    Merci. J'espère que j'étais clair cette fois

  4. #4
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    est ce qu'il y a quelqu'un qui a un idée

  5. #5
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Tu utilises quelle API pour attaquer ton fichier XML? Du DOM ou du SAX?
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  6. #6
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    du DOM

  7. #7
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Voici un exemple qui fonctionne avec ton document que tu as fourni:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    package xmltest;
     
    import java.io.File;
    import java.io.IOException;
    import java.net.URISyntaxException;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.TransformerFactoryConfigurationError;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
     
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
     
    public class Test {
    	private static File content;
     
    	static{
    		try {
    			content = new File(Test.class.getResource("content.xml").toURI());
    		} catch (URISyntaxException e) {
    			e.printStackTrace();
    		}
    	}
     
    	public static void main(String[] args) {
    		try {
    			DocumentBuilder doc = DocumentBuilderFactory.newInstance()
    					.newDocumentBuilder();
    			Document d = doc.parse(content);
    			NodeList list = d.getElementsByTagName("chapitre");
    			for(int i = 0; i < list.getLength(); i++){
    				Node node = list.item(i);
    				if(node.getNodeName().equalsIgnoreCase("chapitre")){
    					Element chapitre = (Element)node;
    					if(node.hasAttributes()){
    						NamedNodeMap attributes = node.getAttributes();
    						Node titre = attributes.getNamedItem("titre");
    						String auteur = getAuteur(titre.getNodeValue());
    						chapitre.setAttribute("auteur", auteur);
    					}
    				}
    			}
    			Source source = new DOMSource(d);
                Result result = new StreamResult(new File("result.xml"));
                Transformer xformer = TransformerFactory.newInstance().newTransformer();
                xformer.transform(source, result);
    		} catch (ParserConfigurationException e) {
    			e.printStackTrace();
    		} catch (SAXException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (TransformerConfigurationException e) {
    			e.printStackTrace();
    		} catch (TransformerFactoryConfigurationError e) {
    			e.printStackTrace();
    		} catch (TransformerException e) {
    			e.printStackTrace();
    		}
    	}
     
    	private static String getAuteur(String nodeValue) {
    		// accès à ton DAO pour récupérer l'auteur du chapitre suivant le titre
    		return "AUTEUR";
    	}
     
    }
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2007
    Messages : 60
    Points : 64
    Points
    64
    Par défaut moins compliqué
    Pourquoi se compliquer la vie ?

    Tu as une BD dont t aimerai convertir le contenu en xml !

    1) connecte-toi a la BD
    2) execute ta requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ResulteSet rs = s.executeQuery("select titre,auteur from ...");
     
    while(rs.next()){
        tonfichier.write("<chapitre>);
        tonfichier.write("<titre>"+rs.getDtring("titre")+"</titre>);
        tonfichier.write("<auteur>"+rs.getString("auteur")+"</auteur>");
        //
        //ça depend aussi de la structure de ta base de données
    si les parties sont dans une autre table tu peux executer une autre requete et recuperer les infos dans un ResultSet et refaire le meme traval pour
    l'ecriture de ton fichier xml
        //
        tonfichier.write("</chapitre>);
    }
    j'espère que ça t'aidera a resoudre ton probleme

  9. #9
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    c'est pas forcément plus simple.... et au niveau conception.... bof mélanger l'accès à la base et l'écriture du fichier xml.... pas top je trouve

    ce que med_ellouze demandait c'est de mettre à jour un document déjà existant il me semble
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  10. #10
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    Tout d'abord, je tiens à vous remercier pour vos réponse,
    Comme il a dit, Pollux, j'ai déjà un document xml et je veux le mettre à jour.
    J'ai bien aimé ton code Pollux, mais je suis un peu bloqué au niveau de la méthode getAuteur.
    Bon, j'ai commencé par créer une nouvelle classe "ConnexionSGBD" dans le meme package que la classe que tu m'a donné "Test".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
     
    import java.sql.Connection;
    import java.sql.DatabaseMetaData;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.SQLWarning;
    import java.sql.Statement;
     
    /** 
     * @author <strong> Mohamed ELLOUZE</strong> 
     * @obj Stage   */
     
    public class ConnexionSGBD { 
     
    	//  les chaines utiles a la connexion avec valeurs par defaut
        private String driver = "com.mysql.jdbc.Driver";
        private String url = "jdbc:mysql://localhost:3306/livre";
        private String login = "root";
        private String password = "";
        private Connection conn = null;
     
        /* Afficher quelques informations à propos the database connection
        */
        public void printInfo(Connection c) throws Exception
        {
        	// Get meta-data about the database
        	DatabaseMetaData info = c.getMetaData();
     
        		System.out.println("\nConnected to :\t" + info.getURL());
        		System.out.println("Driver :\t" + info.getDriverName());
        		System.out.println("Version :\t" + info.getDriverVersion());
        }
     
     
       /* Afficher tous les SQLWarning
        */
        private boolean checkForSQLWarnings(SQLWarning w) throws SQLException
        {
        	boolean warning = false;
     
        	if(w != null) 
        	{
        		warning = true;
        			System.out.println("\n**** Warning ****\n");
     
        			while(w != null) 
        			{
        				System.out.println("SQLState: " + w.getSQLState());
        				System.out.println("Message:  " + w.getMessage());
        				System.out.println("Erreur:   " + w.getErrorCode());
        				System.out.println("");
        				w = w.getNextWarning();
        			}
            }
     
        	return warning;
        }
     
        public void setDriver(String newDriver)
        {
        	driver = newDriver;
        }
     
        public void setLogin(String newLogin, String newPassword)
        {
        	login = newLogin;
        	password = newPassword;
        }
     
        public void setUrl(String newUrl)
        {
        	url = newUrl;
        }
     
        public Connection getConnection()
        {
        	return conn;
        }
     
        /* Afficher tous les SQLException 
        */
        private void printSQLErrors(SQLException e)
        {
            while(e != null) 
            {
            	System.err.println("SQLState: " + e.getSQLState());
                System.err.println("Message:  " + e.getMessage());
                System.err.println("Erreur:   " + e.getErrorCode());
                System.err.println("");
     
                e = e.getNextException();
            }
        }
     
        public void loadDriverAndConnect() throws Exception
        {
        	try {
     
        			// Si la connexion existe deja : on ferme d'abord, puis on re-ouvre
        			if (conn!=null && !conn.isClosed() )
        			{
        				conn.close();
        			}
     
        			// Load the jdbc driver for MySQL
        			/** 
                             * Le nom de la machine ou s'execute le SGBD MySQL : localhost (en local)
                             * Le numero de port sur lequel le SGBD est à l'écoute : 3306
                             * le nom de la base de données à accéder : test
                             * le login : root
                             * le mot de passe : [aucun]
                             * */  			
     
        		Class.forName(driver);
     
                // Etablir une connexion to the database source using Thin JDBC driver
                conn = DriverManager.getConnection(url, login, password);
     
                // Afficher un warning messages si nécessaire
                checkForSQLWarnings(conn.getWarnings());
     
                // Print info messages
                printInfo(conn);
            }
        	catch(SQLException e) {
        		System.err.println("\n*** SQLException caught in LoadDriver()");
        		printSQLErrors(e);
                throw e;
            }
            catch(Exception e) {
    	    // Ce type d'erreur est affiché si JDBC driver used ne peut pas se charger
            	System.err.println("\n*** Exception caught in LoadDriver()");
                throw e;
            }
     
        }
     
     
        /**
         *  Fermer la connexion to the data base source
         */
        public void close() throws Exception
        {
    	try {
    	    conn.close();
                System.out.println("Test : Disconnecting ...");
            }
            catch(Exception e) {
    	    System.err.println("\n*** Exception caught in close()");
                throw e;
            }
        }
     
     
     
        public void createTablesAndInit() throws Exception    
        {
        	Statement stmt = conn.createStatement();
        	String creerTableBiblio = "CREATE TABLE bibliotheque" +
                                "(id mediumint(10) NOT NULL default '0', titre varchar(100) NOT NULL default '',"+ 
                                "auteur varchar(100) NOT NULL default '',livre varchar(100) NOT NULL default '', " +
                                "PRIMARY KEY  (`id`)"+
                                ")ENGINE=MyISAM DEFAULT CHARSET=latin1";
     
     
        	stmt.executeUpdate(creerTableBiblio);
     
        	stmt.executeUpdate("INSERT INTO bibliotheque VALUES (1, 'Titre du chapitre 1', 'momo', 'java')");
        	stmt.executeUpdate("INSERT INTO bibliotheque VALUES (2, 'Titre du chapitre 2', 'mamadou', 'xml')");
     
        }
    }
    Ensuite pour faire un petit test, j'ai ajouté deux méthode dans la même classe ConnexionSGBD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    public void selectData() throws Exception    
        {
        	Statement stmt = conn.createStatement();
        	ResultSet rs = null;
        	String requete = " SELECT auteur, livre, titre"+
        					 " FROM bibliotheque"+
        					 " where titre='Titre du chapitre 1' ";
        	try{
        		rs = stmt.executeQuery(requete);	
        	}
        	catch(SQLException e){
        		System.err.println("Erreur dans selectData() - 1");
        		throw e;
        	}
     
        	while(rs.next())
        	{
        		String aut = rs.getString("auteur");
        		String liv = rs.getString("livre");
        		String tit = rs.getString("titre");
        		System.out.println("le titre\t"+tit+"\test contenu dans le livre\t"+liv+ " \t et a comme auteur\t" +aut);
        	}
        }
     
        public static void main(String[] args) { 
        	ConnexionSGBD t = new ConnexionSGBD();
        	try{
        		t.loadDriverAndConnect();
        		t.createTablesAndInit();
        		t.selectData();
        		t.close();
        	}
        	catch(Exception e) {
        	    System.err.println("\n*** SQLException caught in main()");			
        	}
            }
    Bon comme vous le voyez ici, je fais un test bien particulier, je prends titre='Titre du chapitre 1' mais bon, ce que je veux c'est qu'il sera d'une façon dynamique, c'est à dire tout dépend de ce qu'il y a dans la balise comme titre, ben il va chercher la bonne information dans la BD.

    Donc c'est là ou on va utiliser la méthode getAuteur. mais vu que je débute en xml, ché pas trop comment gérer ça.

    J'ai pensé à faire ça, mais je suis pas sur, je l'ai pas encore testé, mais je pense qu'il y a des trucs à modifier et surtout à optimiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    private static String getAuteur(String nodeValue) {
    	// création d'une fabrique de documents
              DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     
            // création d'un constructeur de documents
              DocumentBuilder builder = factory.newDocumentBuilder();
     
     
    	Document doc = builder.parse(content);
     
    	// on recupere la racine du document
    	Element racine = doc.getDocumentElement();
     
    	// on definit la tag a modifier
    	String tag = "chapitre";
     
     
    	NodeList liste = racine.getElementsByTagName(tag);
     
    	// recupération du premier element chapitre
    	// j'ai pas utilisé de boucle vu que dans le main j'utilise déjà une 
    	Element chapitre = (Element)liste.item(0);
     
    	// recuperation de l'attribut titre 
    	NamedNodeMap attributes = chapitre.getAttributes();
    	Node titre_att = attributes.getNamedItem("titre");
     
     
    	// accès à ton DAO pour récupérer l'auteur du chapitre suivant le titre
    	Statement stmt = conn.createStatement();
        	ResultSet rs = null;
        	String requete = " SELECT auteur"+
        			 " FROM bibliotheque"+
        			 " where titre="+titre_att+";
        	try{
        		rs = stmt.executeQuery(requete);	
        	}
        	catch(SQLException e){
        		System.err.println("Erreur dans selectData() - 1");
        		throw e;
        	}
     
        	while(rs.next())
        	{
        		String AUTEUR = rs.getString("auteur");
        	}	
     
    	return "AUTEUR";
     
    }
    voilà voilà, j'attends vos commentaires...

  11. #11
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    Pour benben02, merci pour ta réponse.
    Si j'ai bien compris ton code, je pense que t'es entrain de construire un document à partir d'une bd alors que je veux modifier mon fichier xml (qui existe déjà) et regénrer un nouveau fichier xml tout en se basant sur le fichier initial xml et des données dans ma BD.

    Par contre, je viens de poster une proposition pour gérer ce problème, mais je pense qu'il y a quelques petits problèmes.

    Si t'as des propositions ou des commentaires, ben n'hésites surtout pas

  12. #12
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    je viens de tester le code que je viens de poster et il y a un problème au niveau de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Statement stmt = conn.createStatement();
    il n'arrive pas à connaitre conn, pourtant j'importe la classe ConnexionSGBD dans la fichier Test.java

    J'ai meme essayer de la définir en tant que variabe locale mais il n'arrive pas à le saisir Voilà j'ai essayé de mettre ça, mais ça marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public Connection conn;
    Si quelqu'un a une idée merci de m'eclairicir un peu

  13. #13
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Le code que je t'ai posté envois déjà la valeur de l'attribut titre à la méthode getAuteur si jamais

    Pour ton problème d'accès à la base de donnée. Je te propose de regarder dans la FAQ et si tu trouves pas, d'ouvrir un nouveau post parce que là ca n'a plus grand chose à voir avec XML .
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  14. #14
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    Ok, merci. je poste demain le bon code complet comme ça , ça peut servir à d'autres membres du groupe.

    Mais juste un petit truc, est ce que tu peux regarder si la méthode getAuteur que j'ai posté est bien codé (comme je t'ai dit, je débute un peu avec xml et avec java d'ailleur, donc s'il y a des remarques ou des critiques sur la façon dont elle a était codé, n'hésites surtout pas).

    Merci.

  15. #15
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    Dans le code que tu m'as envoyé, je vois que t'as défini un fichier qui s'appelle "content" à de ton fichier source content.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static{
    		try {
    			content = new File(Test.class.getResource("content.xml").toURI());
    		} catch (URISyntaxException e) {
    			e.printStackTrace();
    		}
    	}
    Je voulais savoir si c'est possible d'appliquer le code qui est juste en dessous sur plusieurs fichiers xml en même temps et non pas sur le fichier "content" uniquement.
    voilà , par exemple j'ai un répertoire (c:\ProjetXml) qui contient 3 fichier xml (a_1.xml, a_10.xml, a_100.xml) et en fait, je voulais savoir comment pourrai-je exécuter la classe Test sur ces 3 fichiers en une seule fois.

    Je pense que la solution est de passer ces trois fichiers en paramètres dans la méthode main, mais vu que je débute en programmation, j'aimerai bien savoir s'il existe déjà des methodes en java qui permettent de faire ça.

    Ensuite une fois, c'est fait, j'aimerai bien changé le nom des fichiers en ajoutant par exemple update à la fin du fichier. c'est à dire en final, j'aurai (a_1-update.xml, a_10-update.xml, a_100-update.xml).

    Merci d'avance.

  16. #16
    Membre éclairé Avatar de Pollux
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    706
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 706
    Points : 680
    Points
    680
    Par défaut
    Il y a pas de problème. Tu peux "customiser" la classe comme tu veux. Sache juste que la méthode main ne s'invoque pas par ton code. Tu n'as donc qu'à modifier la signature de la méthode en lui ajoutant en paramètre un File que tu passeras à ton Document (pour la source donc) et un autre File pour la destination du traitement.
    Pour chaque langage existe une faq / N'oubliez pas de lire les règles du forum

  17. #17
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    St,
    Je viens d'exécuter ce code et comme par hasard, j'ai une erreur et j'avoue que j'ai bien compris le type d'erreur (apparemment il n'arrive pas à trouver le chemin du content.xml)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    static{
    		try {
    			content = new File(Test.class.getResource("content.xml").toURI());
    		} catch (URISyntaxException e) {
    			e.printStackTrace();
    		}
    	}
    J'ai essayé de mettre le bon chemin en modifiant content.xml par c:/testxml/content.xml (en fait c'est là ou il se trouve le fichier content.xml) mais c'est tjs la même erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Java.lang.ExceptionInitializerError
    cause by : java.lang.NullPonterException
              at dom.Test.<clinit>(Test.java:42) qui correspond à cette ligne là 
     
    content = new File(Test.class.getResource("content.xml").toURI());
    et j'ai une autre fenetre qui s'affiche dont laquelle il m'indique qu'il n'est pas capable de trouver the main class.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    could not find the main class. Program will exit
    Merci pour votre lumière.

  18. #18
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    une petite précision peut être :

    voilà ma classe finale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    package dom;
     
     
    import java.io.File;
    import java.io.IOException;
    import java.net.URISyntaxException;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.TransformerFactoryConfigurationError;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
     
    import org.w3c.dom.DOMException;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.SAXException;
     
    import dom.ConnexionSGBD;
     
    public class Test {
    	private static File content;
    	public static Connection conn = null;
     
     
    	static{
    		try {
    			content = new File(Test.class.getResource("c:/testxml/content.xml").toURI());
    		} catch (URISyntaxException e) {
    			e.printStackTrace();
    		}
    	}
     
    	private static String getAuteur(String nodeValue) throws SQLException {
     
    		// accès au BD pour récupérer l'auteur du chapitre suivant le titre
    	        Statement stmt = conn.createStatement();
    	    	ResultSet rs = null;
    	    		String requete = " SELECT auteur"+
    	    						 " FROM bibliotheque"+
    	    						 " where titre="+nodeValue;
    	    	try{
    	    		rs = stmt.executeQuery(requete);	
    	    	}
    	    	catch(SQLException e){
    	    		System.err.println("Erreur dans selectData() - 1");
    	    		throw e;
    	    	}
     
    	    	while(rs.next())
    	    	{
    	    		String AUTEUR = rs.getString("auteur");
    	    	}	
     
    		return "AUTEUR";
     
    	}
     
     
    	public static void main(String[] args) {
    		ConnexionSGBD t = new ConnexionSGBD();
    		try {
    	    		t.loadDriverAndConnect();
    	    		//t.createTablesAndInit();
    	    		//t.selectData();
    			DocumentBuilder doc = DocumentBuilderFactory.newInstance()
    					.newDocumentBuilder();
    			Document d = doc.parse(content);
    			NodeList list = d.getElementsByTagName("chapitre");
    			for(int i = 0; i < list.getLength(); i++){
    				Node node = list.item(i);
    				if(node.getNodeName().equalsIgnoreCase("chapitre")){
    					Element chapitre = (Element)node;
    					if(node.hasAttributes()){
    						NamedNodeMap attributes = node.getAttributes();
    						Node titre = attributes.getNamedItem("titre");
    						String auteur = getAuteur(titre.getNodeValue());
    						chapitre.setAttribute("auteur", auteur);
    					}
    				}
    			}
    			Source source = new DOMSource(d);
                Result result = new StreamResult(new File("c:/testxml/result.xml"));
                Transformer xformer = TransformerFactory.newInstance().newTransformer();
                xformer.transform(source, result);
                // fermer le serveur Mysql
                t.close();
    		} catch (ParserConfigurationException e) {
    			e.printStackTrace();
    		} catch (SAXException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} catch (TransformerConfigurationException e) {
    			e.printStackTrace();
    		} catch (TransformerFactoryConfigurationError e) {
    			e.printStackTrace();
    		} catch (TransformerException e) {
    			e.printStackTrace();
    		} catch (DOMException e) {
    			// TODO Bloc catch auto-généré
    			e.printStackTrace();
    		} catch (SQLException e) {
    			// TODO Bloc catch auto-généré
    			e.printStackTrace();
    		}catch(Exception e) {
        	    System.err.println("\n*** SQLException caught in main()");			
        	}
     
    	}
     
    }

  19. #19
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    Donc comme vous le voyez dans la méthode main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public static void main(String[] args) {
    		ConnexionSGBD t = new ConnexionSGBD();
    		try {
                                    ...........
    Je fais une instance de la classe ConnexionSGBD, Je tiens à préciser que c'est une classe à part qui a été codé dans le même package que la classe Test et dont vous trouvez le code sur la page 1 "mettre à jour un xml à partir d'une BD"

    J'espère que j'étais clair

    Merci d'avance

  20. #20
    Membre du Club Avatar de med_ellouze
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 89
    Points : 52
    Points
    52
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tu n'as donc qu'à modifier la signature de la méthode en lui ajoutant en paramètre un File que tu passeras à ton Document (pour la source donc) et un autre File pour la destination du traitement.
    Est ce que tu peux détailler un peu s'il te plait

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/10/2009, 11h52
  2. [Toutes versions] Mettre à jour un champ à partir d'une variable
    Par familledacp dans le forum VBA Access
    Réponses: 6
    Dernier message: 25/04/2009, 20h43
  3. [C#] mettre à jour ma bdd à partir d'une datatable
    Par rudhf dans le forum Windows Forms
    Réponses: 17
    Dernier message: 27/04/2006, 14h27
  4. Réponses: 4
    Dernier message: 16/09/2005, 14h49
  5. Réponses: 3
    Dernier message: 09/07/2004, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo