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 :

Lire des données imbriquées dans d'autres


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut Lire des données imbriquées dans d'autres
    Bonjour,

    Je suis entrain de faire une application qui lit un fichier xml et qui insère ensuite les données dans la base si j'arrive à aller jusque là.
    Je souhaiterai associés les colis à la livraison lors de la lecture du fichier qui se présente comme ceci:
    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
    <livraisons>
      <livraison>
        <client>Mme Lagrange</client>
        <adresse>28 rue des Rainettes 33150 Cenon</adresse>
        <colis>
          <ref>172648574</ref>
          <montant>96.00</montant>
        </colis>
        <colis>
          <ref>172648586</ref>
          <montant>45.80</montant>
        </colis>
      </livraison>
      <livraison>
        <client>M. Iribarne</client>
        <adresse>5 chemin des Dunes 33510 Andernos</adresse>
        <colis>
          <ref>172648588</ref>
          <montant>146.75</montant>
        </colis>
      </livraison>  
    </livraisons>
    Voilà l'affichage que j'obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Livraison : client : Mme Lagrange => adresse : 28 rue des Rainettes 33150 Cenon
    Colis : référence : 172648574 => montant : 96.0
    Colis : référence : 172648586 => montant : 45.8
    Colis : référence : 172648588 => montant : 146.75
    Livraison : client : M. Iribarne => adresse : 5 chemin des Dunes 33510 Andernos
    Colis : référence : 172648574 => montant : 96.0
    Colis : référence : 172648586 => montant : 45.8
    Colis : référence : 172648588 => montant : 146.75
    voici mes classe livraison et colis:
    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
    public class Livraison {
     
    	private String client;
    	private String adresse;
     
    	public Livraison(String client, String adresse) {
    		this.client = client;
    		this.adresse = adresse;
    	}
     
    	public Livraison(){
    		super();
    	}
     
    	public String getClient(){
    		return client;
    	}
     
    	public String getAdresse(){
    		return adresse;
    	}
     
    	public void setClient(String client) {
    		this.client = client;
    	}
     
    	public void setAdresse(String adresse) {
    		this.adresse = adresse;
    	}
     
    	public String toString(){
    		return "Livraison : client : "+client+" => adresse : "+adresse;
    	}
    }
    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
    public class Colis {
     
    	private String ref;
    	private double montant=0;
    	private Livraison idLivraison;
     
    	public Colis(Livraison idLivraison, double montant, String ref) {
    		super();
    		this.idLivraison = idLivraison;
    		this.montant = montant;
    		this.ref = ref;
    	}
     
    	public Colis(){
    		super();
    	}
     
    	public double getMontant() {
    		return montant;
    	}
     
    	public Livraison getIdLivraison() {
    		return idLivraison;
    	}
     
    	public String getRef(){
    		return ref;
    	}
     
    	public void setRef(String ref) {
    		this.ref = ref;
    	}
     
    	public void setMontant(double montant) {
    		this.montant = montant;
    	}
     
    	public String toString(){
    		return "Colis : référence : "+ref+" => montant : "+montant;
    	}
    }
    Ma classe LitXml:
    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
    public class LitXml {
     
    	private List<Livraison> lesLivraisons;
    	private List<Colis> lesColis;
     
    	public LitXml(Context context)  {
    		try {
    			MaSaxHandler handler = new MaSaxHandler();
    			Resources resources = context.getResources();
    			InputStream inputStream = resources.openRawResource(R.raw.livraisons);
    			handler.parse(inputStream);
    	        lesLivraisons = handler.getLesLivraisons();
    	        lesColis = handler.getLesColis();
    		} catch (Exception e) {
    			Log.i("litxml", "erreur");
    		}
    	}
     
    	public List<String> donneLivraisons(){
    		List<String> liste = new ArrayList<String>();
    		for (Livraison livraison : lesLivraisons)
    			liste.add(livraison.toString());
    		return liste;
    	}
     
    	public List<String> donneColis(){
    		List<String> liste = new ArrayList<String>();
    		for (Colis colis : lesColis)
    			liste.add(colis.toString());
    		return liste;
    	}
    }
    ma classe MaSaxHandler
    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
    ublic class MaSaxHandler extends DefaultHandler {
     
    	   private Livraison livraison;
    	   private List<Livraison> lesLivraisons = new ArrayList<Livraison>();
    	   private Colis colis;
    	   private List<Colis> lesColis = new ArrayList<Colis>();
    	   private String valeur;
     
    	   public void parse(InputStream is) throws ParserConfigurationException, SAXException, IOException{
    		   SAXParserFactory factory = SAXParserFactory.newInstance();
    		   SAXParser parser=factory.newSAXParser();
    		   parser.parse(is,this);
    	   }
    	   public void startElement( String uri, String localName, String qName, Attributes attributes)
    			   throws SAXException {
    		   if (localName.equals("livraison"))  livraison = new Livraison();
    		   if (localName.equals("colis")) colis = new Colis();
    	   }
    	   public void characters(char[] ch,int start, int length) throws SAXException{
    			valeur = new String(ch,start,length);
    		}
    	   public void endElement( String uri, String localName,String qName) throws SAXException {
    	        if (localName.equals("livraison")) {
    	        	lesLivraisons.add(livraison);
    	        }else if (localName.equals("client")){
    	        	livraison.setClient(valeur);
    	        }else if (localName.equals("adresse")){
    	        	livraison.setAdresse(valeur);
    	        }else if (localName.equals("colis")){
    	        	lesColis.add(colis);
    	        }else if (localName.equals("ref")){
    	        	colis.setRef(valeur);
    	        }else if (localName.equals("montant")){
    	        	double monLong= Double.parseDouble(valeur);
    	        	colis.setMontant(monLong);
    	        }
    	    }
    	   public List<Livraison> getLesLivraisons() {
    		   return lesLivraisons;
    	   }
     
    	   public List<Colis> getLesColis() {
    			return lesColis;
    	   }
    }
    Code de l'activité principal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		for (String ligne : litXml.donneLivraisons()){
    			Log.i("litxml", ligne);
    			for (String ligne1 : litXml.donneColis()){
    				Log.i("litxml", ligne1);
    			}
     
    		}
    Merci de votre aide

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Le plus simple ce serait que la classe Livraison contienne aussi une List<Colis> que tu peux compléter à mesure que tu lis le XML.
    Et donc MaSaxHandler ne contiendrait pas de List<Colis>. À la place il faut ajouter les colis à la liste de la livraison actuelle.

    (Je pars du principe que tu utilises SAX au lieu de StAX, DOM ou JAXB dans le but d'économiser de la mémoire et des bibliothèques externes. Auquel cas, on ne peut pas simplifier beaucoup.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    Oui,

    J'utilise SAXParser

    Et à un client, j'associe donc la liste des colis livré?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    J'ai refait ma classe comme ceci:
    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
    	private String client;
    	private String adresse;
    	private List<Colis> lesColis;
     
    	public Livraison(String client, String adresse) {
    		this.client = client;
    		this.adresse = adresse;
    		lesColis = new ArrayList<Colis>();
    	}
     
    	public Livraison(){
    		super();
    	}
     
    	public String getClient(){
    		return client;
    	}
     
    	public String getAdresse(){
    		return adresse;
    	}
     
    	public void setClient(String client) {
    		this.client = client;
    	}
     
    	public void setAdresse(String adresse) {
    		this.adresse = adresse;
    	}
     
    	public void setLesColis(List<Colis> lesColis){
    		this.lesColis = lesColis;
    	}
     
    	public String toString(){
    		return "Livraison : client : "+client+" => adresse : "+adresse;
    	}
    Mais ici je bloque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (localName.equals("colis")){
    	        	livraison.setLesColis(Colis);

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    Personne ?

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Mais... C'est pas un set qu'il faut, c'est un get -_-°.

    Ou alors juste un addColis()
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Bonjour,

    Tu pourrais essayer de trier la collection de Colis par colis.livraison.client.idClient dans une Map<Integer, List<Colis>> comme dans la première réponse ici.
    Ou peut-être trier par colis.livraison.client dans une Map<String, List<Colis>>, vue que le Client est apparemment une variable de type String.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 225
    Par défaut
    Je bloque toujours pour l'affichage mais j'ai l'impression que mes livraison ne s'ajoutent plus à ma liste livraison depuis que j'ai fait une référence avec colis
    Pour l'instant, je souhaite afficher les données dans une console LogCat

Discussions similaires

  1. lire des données hexa dans un fichier
    Par neurodoxx dans le forum C++
    Réponses: 1
    Dernier message: 11/02/2011, 15h43
  2. [SQL-Server] Ecrire et lire des données Unicode dans MSSQL 2005
    Par kaboume dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 30/09/2010, 08h27
  3. Lire des données saisies dans des TEdit
    Par hayat2 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/05/2009, 07h19
  4. Réponses: 7
    Dernier message: 03/12/2008, 15h18
  5. Copier des données excel dans un autre fichier excel
    Par titemireille dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/10/2007, 20h57

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