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 :

Validité du fichier XML? Validité du parcours?


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut Validité du fichier XML? Validité du parcours?
    Bonjour tout le monde,
    Tout d'abord mes meilleurs vœux à tout le forum.

    Voilà j'aurais eu besoin de vos conseils concernant 2 "choses". La première est la validité d'un fichier XML que je réalise. J'aimerais savoir s'il rentre bien dans la norme, ou ma façon de faire est "inhabituelle". (C'est la première fois que j'utilise du XML)

    C'est la sauvegarder d'un historique financier, qui comporte des mouvements d'argent. Ces mouvements étant caractérisés par une date, un type (Retrait/Dépôt), et un montant.


    Le voilà
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?> 
    - <HistoriqueFinancier>
    - <!-- Sauvegarder d'un historique financier, en XML
      --> 
    - <Poste label="voiture">
    - <Mouvement>
      <Date>ven. déc. 28 00:24:45 CET 2007</Date> 
      <Type>Dépôt</Type> 
      <Montant>8000</Montant> 
      </Mouvement>
    - <Mouvement>
      <Date>ven. déc. 28 00:24:45 CET 2007</Date> 
      <Type>Retrait</Type> 
      <Montant>1200</Montant> 
      </Mouvement>
    - <Mouvement>
      <Date>ven. déc. 28 00:24:45 CET 2007</Date> 
      <Type>Retrait</Type> 
      <Montant>2000</Montant> 
      </Mouvement>
    - <Mouvement>
      <Date>ven. déc. 28 00:24:46 CET 2007</Date> 
      <Type>Retrait</Type> 
      <Montant>500</Montant> 
      </Mouvement>
    - <Mouvement>
      <Date>ven. déc. 28 00:25:44 CET 2007</Date> 
      <Type>Dépôt</Type> 
      <Montant>500</Montant> 
      </Mouvement>
      </Poste>
    - <Poste label="logement">
    - <Mouvement>
      <Date>ven. déc. 28 00:24:45 CET 2007</Date> 
      <Type>Dépôt</Type> 
      <Montant>2000</Montant> 
      </Mouvement>
    - <Mouvement>
      <Date>ven. déc. 28 00:24:46 CET 2007</Date> 
      <Type>Dépôt</Type> 
      <Montant>500</Montant> 
      </Mouvement>
    - <Mouvement>
      <Date>ven. déc. 28 00:25:44 CET 2007</Date> 
      <Type>Retrait</Type> 
      <Montant>500</Montant> 
      </Mouvement>
      </Poste>
      </HistoriqueFinancier>

    Et ma seconde question serait la validité de mon code Java, utilisé pour parcourir ce fichier XML. Il marche, mais je ne sais pas s'il est optimale/correcte d’un point d’vu syntaxique ou utilisation (j’ai utilisé DOM).
    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
     
     
    HistoriqueFinancier historiqueFin = new HistoriqueFinancier();
    try{
    	// création d'une fabrique de documents
    DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
     
    // création d'un constructeur de documents
    DocumentBuilder constructeur = fabrique.newDocumentBuilder();
     
    // lecture du contenu d'un fichier XML avec DOM
    File xml = new File("./histov2.xml");
    Document document = constructeur.parse(xml);
     
    //traitement du document
    Element racine = document.getDocumentElement();
    NodeList nodeList = racine.getChildNodes();
    for(int i=0; i<nodeList.getLength(); i++){
    	Node n = nodeList.item(i);
    	if(n.getNodeName().compareTo("Poste")==0){
    		String posteLabel = n.getAttributes().item(0).getTextContent();
    		historiqueFin.ajouterUnPoste(posteLabel);
    		//System.out.println("Poste : "+posteLabel);
    		NodeList nodeList2 = n.getChildNodes();
    		for(int j=0; j<nodeList2.getLength(); j++){
    			Node n2 = nodeList2.item(j);
    			if(n2.getNodeName().compareTo("Mouvement")==0){
    				//System.out.println("MOUVEMENT !!! ");
    				NodeList nodeList3 = n2.getChildNodes();
    				String dateMvt = nodeList3.item(1).getTextContent();
    				String typeMvt = nodeList3.item(3).getTextContent();
    				String montantMvt = nodeList3.item(5).getTextContent();
    				//System.out.println("Date : "+dateMvt);
    				//System.out.println("Type : "+typeMvt);
    				//System.out.println("Montant : "+montantMvt);
    				// FAIRE UN MOUVEMENT DS L HISTO FINANCIER
    				Date dateMvt_Date=null;
    				try {
    					dateMvt_Date= InterfaçageSauvegarde.dateFormat.parse(dateMvt);
    				} catch (ParseException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				if(typeMvt.compareTo("Dépôt")==0){
    					historiqueFin.recevoirSommePour(Integer.parseInt(montantMvt), posteLabel,dateMvt_Date);
    				}else if(typeMvt.compareTo("Retrait")==0){
    						historiqueFin.depenserSommePour(Integer.parseInt(montantMvt), posteLabel,dateMvt_Date);
    					}
     
    				}
    			}
    		}
    	}
     
     
    }catch(ParserConfigurationException pce){
    	System.out.println("Erreur de configuration du parseur DOM");
    System.out.println("lors de l'appel à fabrique.newDocumentBuilder();");
    }catch(SAXException se){
    	System.out.println("Erreur lors du parsing du document");
    System.out.println("lors de l'appel à construteur.parse(xml)");
    }catch(IOException ioe){
    	System.out.println("Erreur d'entrée/sortie");
    System.out.println("lors de l'appel à construteur.parse(xml)");
    }

    Merci pour vos conseils

  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Premièrement, il existe des formats recommandés selon le type de données : les dates telles que 2008-01-05T11:01:23+01:00 et les nombres avec . comme séparateur décimal

    Deuxièmement, il y a toujours débat sur l'utilisation ou non d'attributs. Dans votre cas "Date", "Type" et "Montant" devraient plutôt être des attributs car ils ne sont pas amenés à avoir des fils et ce sont des valeurs typées

    Troisièmement, il est peut-être préférable de n'utiliser que des minuscules dans les noms d'éléments. C'est en tout cas ce qui est maintenant imposé en XHTML.

    Quatrièmement, sur l'exploitation du document, il n'est absolument pas prudent de se fier à la place d'un élément pour savoir qui il est. Il faut le rechercher explicitement par son nom (généralement c'est plus facile à faire pour un attribut qu'un sous-élément). Il me semble même préférable de ne pas partir de la racine pour ne pas être tributaire de la structure qui pourrait évoluer : une requête XPath telle que //Montant n'est pas optimale car elle va rechercher dans tout l'arbre mais elle est bien sympa pour avoir un code très court et évolutif. Ensuite, il suffit de demander en XPath ancestor:poste pour récupérer le poste correspondant : s'il y a plusieurs postes possibles, il n'y aura, pour autant, qu'une seule boucle : celle sur Montant !

    XML permet de construire une micro base de données en mémoire. Même s'il ne s'agit pas d'une base relationnelle, c'est plutôt une base navigationnelle où seulement certains liens sont autorisés..., on peut tout de même y faire toute sorte de requêtes.

    J'ai quelques idées sur ce qu'il faudrait rajouter pour faire XML version 2 ... et arriver au niveau d'une base navigationnelle !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 36
    Par défaut
    Merci beaucoup pour la réponse, je vais me pencher dessus de suite.

Discussions similaires

  1. Réponses: 9
    Dernier message: 14/11/2020, 18h53
  2. Validité d'un fichier XML
    Par Raphael1980 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 30/04/2009, 09h45
  3. [DTD] utiliser avec JAVA des fichiers DTD pour vérifier la validité des fichiers XML
    Par Balbuzard dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 20/04/2009, 12h10
  4. [Xerces] Verifier la validité d'un fichier XML
    Par alaparra dans le forum XML
    Réponses: 3
    Dernier message: 29/08/2008, 16h35
  5. Vérifier la validité d'un fichier xml par xsd
    Par rzayani dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 11/04/2007, 15h09

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