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 :

Choisir la bonne API pour lire un flux XML


Sujet :

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

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut Choisir la bonne API pour lire un flux XML
    Bonjour,

    J'ai un flux xml de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <date>
       <plein de données dans tous les sens/>
       ...
    </date>
    ...
    Et je voudrais récupérer certaines données dans le tas entre deux dates.

    Quelle API me permettrait de faire ça simplement, sans parcourir 1000 fois le fichier ?

    J'ai regardé un peu XPath, mais les algos style "je récupère TOUS les noeuds, puis apres je les traites un à un" ça sent les 1000 lectures à plein nez.

    En fait Xpath c'est bien s'il y a un moyen de faire comme un iterator, genre getNextNode(pattern), et il va le lire de manière itérative, sans revenir au début.

    Bref, avant de me lancer dedans, je voulais quelques avis.

    Merci d'avance.
    Venez partager vos expériences au sein d'un projet sur slicesofit, agile & amélioration continue

  2. #2
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    et ce que tu a vu le JAXB
    je pense que c'est le meilleur pour parser et construire les fichier XML
    Ce qu'on appelons le hasard n'est que notre incapacité à comprendre un degré d'ordre supérieur.

  3. #3
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    certaines données dans le tas entre deux dates.
    Tu pourrais être plus clair ?
    J'ai regardé un peu XPath, mais les algos style "je récupère TOUS les noeuds, puis apres je les traites un à un" ça sent les 1000 lectures à plein nez.
    XPath te permet de trouver avec une grande précision les noeuds que tu souhaite. Cependant, ce n'est pas toujours adapté.
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  4. #4
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut
    Bon, je vous préviens, c'est le flux xml le plus con du monde !

    C'est un flux des taux de change par rapport à l'euro :
    Code XML : 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
    <gesmes:Envelope>
      <gesmes:subject>Reference rates</gesmes:subject> 
      <gesmes:Sender>
         <gesmes:name>European Central Bank</gesmes:name>
      </gesmes:Sender>
      <Cube>
         <Cube time="2009-10-14">
            <Cube currency="USD" rate="1.4881"/>
            <Cube currency="JPY" rate="133.39"/>
            <Cube currency="BGN" rate="1.9558"/>
            <Cube currency="CZK" rate="25.87"/>
            <Cube currency="DKK" rate="7.4437"/>
            ... plein d autres ....
         </Cube>
         <Cube time="2009-10-13">
            <Cube currency="USD" rate="1.4864"/>
            <Cube currency="JPY" rate="133.02"/>
            <Cube currency="BGN" rate="1.9558"/>
            ... encore ...
         </Cube>
        .. etc pendant 5 ans ..
      </Cube>
    </gesmes:Envelope>

    Eh ouai.. ça calme non ?

    Moi de mon coté, je veux pour toutes les dates entre datedébut et datefin les rates pour N currencies.

    Si je suis un GROS bourrin, je prends mon xpath et je fais un getAllNodes pour les dates, pour le curr1, le curr2 etc..

    En gros, je me retrouve avec N+1 parcours du fichier, mais c'est facile à coder (j'en parle parce que c'est la solution choisie par mon prédécesseur).

    JAXB, j'ai pas trop regardé, mais je sens que ça va être limite.

    Difficulté supplémentaire, si je puis dire, c'est que je voudrais que mon parseur soit commun a plein de fichiers xml différents, avec juste de la conf à changer.

    J'ai fait ça pour les fichiers CSV (5 différents) : vu que je veux toujours des couples <date,prix> j'ai fait un parseur unique pour tout avec juste de la conf qui change (genre les cases, les formats etc)

    Donc voila, la méthode bourrin ci dessus est facilement codable et polymorphable (oui oui) avec de la conf, mais c'est laid, donc si vous pouvez m'aider à trouver une API qui me résoudrait le bousin d'un coup de barrette magique, ça serait cool.

    Merci d'avance
    Venez partager vos expériences au sein d'un projet sur slicesofit, agile & amélioration continue

  5. #5
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Citation Envoyé par Faiche Voir le message
    JAXB, j'ai pas trop regardé, mais je sens que ça va être limite.
    Jaxb c'est pas fait pour ça, c'est destiné à de la réification objet.

    Pour tes besoins, plusieurs solutions :

    • la bibliothèque Stax conviendrait tout à fait. Tu parse le fichier une unique fois, et tu analyse au fil de l'eau, d'où une faible consommation mémoire. C'est toi qui pilote la lecture selon l'analyse que tu fais des éléments parcourus.
    • la bibliothèque Dom4j te permet une lecture évènementielle filtrée par un xpath.
    • Enfin, une autre bibliothèque vtd-xml, que je n'ai jamais utilisée, mais qui permet d'effectuer des requêtes xpath sur des fichiers de 256 Go. Je pense que ca doit être efficace.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/02/2012, 15h02
  2. API pour lire fichier Thumbs.db
    Par boobi31 dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 21/09/2007, 13h36
  3. Problème pour lire les flux rss en flex
    Par gannher dans le forum Flex
    Réponses: 6
    Dernier message: 18/07/2007, 16h24
  4. [FLASH]Recherche d'une API pour lire du FLASH
    Par narmataru dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 07/11/2006, 15h03

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