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 :

Parser un flux XML (type fichier de log) en java


Sujet :

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

  1. #1
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Par défaut Parser un flux XML (type fichier de log) en java
    Le titre a l'air simple, mais j'ai beau chercher, je ne vois pas de façon triviale de faire ce que je souhaite.
    Alors, voilà mon soucis.
    Je joue à un jeu (poker , et à chaque fin de main, l'IHM du site de jeu vide dans un fichier dit "historique" en xml le déroulement de la main.
    La structure des données xml pour le déroulement d'une main est la suivante (pour exemple):

    - <game gamecode="2132861814">
    - <general>
    <startdate>2009-03-21 18:18:23</startdate>
    - <players>
    <player seat="4" name="toto" chips="8,810" dealer="1" win="12,380" bet="6,190" />
    <player seat="6" name="titi" chips="6,190" dealer="0" win="0" bet="6,190" />
    </players>
    </general>
    - <round no="0">
    <action no="1" player="toto" type="1" sum="200" cards="[cards]" />
    <action no="2" player="titi" type="2" sum="400" cards="[cards]" />
    </round>
    - <round no="1">
    <cards type="Pocket" player="toto">D2 DK</cards>
    <action no="3" player="toto" type="23" sum="800" cards="" />
    <cards type="Pocket" player="titi">H6 HQ</cards>
    <action no="4" player="titi" type="3" sum="400" cards="" />
    </round>
    - <round no="2">
    <cards type="Flop" player="">D5 H5 DQ</cards>
    <action no="6" player="toto" type="23" sum="3,200" cards="" />
    <action no="8" player="toto" type="3" sum="2,190" cards="" />
    <action no="5" player="titi" type="5" sum="1,600" cards="" />
    <action no="7" player="titi" type="23" sum="5,390" cards="" />
    </round>
    - <round no="3">
    <cards type="Turn" player="">D7</cards>
    </round>
    - <round no="4">
    <cards type="River" player="">S3</cards>
    </round>
    </game>
    ...et pour chaque nouvelle main jouée, le site enverra des données similaires suivant ce format dans le fichier d'historique.

    Mon besoin est donc de récupérer au fil de l'eau ces données pour procéder à des analyses en temps réel. Il me faut donc parser le XML. Simple direz-vous ? Peut-être, mais les exemples de parsing XML que j'ai vu font tous référence à un fichier "fixe", i.e dont le contenu n'évolue pas avec le temps. Or mon fichier historique s'apparente à un fichier de log qui évolue avec le temps.
    Pour parser les données, je ne peux (veux) pas utiliser le parseur DOM car il charge toute la structure du document, or là mon document évolue avec le temps et peut être lourd (si je gagne au poker, je reste plus longtemps à jouer ). Je compte donc utiliser la méthode SAX.

    Mais alors comment faire pour ne parser que les dernières données qui viennent d'être insérées dans le fichier et pas les données des toutes premières mains (par ex. j'ai déjà récupérées les données des mains n° 1, 2 et 3 par exemple, le site m'envoie l'historique de la main 4, je veux donc récupérer uniquement ces données de la main 4 sans parser les données des mains 1, 2 et 3) ?

  2. #2
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Par défaut
    Personne ne répond...
    Peut-être ai-je mal formulée ma demande.
    Je ne demande pas un code tout prêt qui marche...Je souhaite plus être orienté sur un choix de solution...histoire d'éviter de partir dans le décor

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Par défaut
    Je ne sais pas si ça va t'aider, mais regarde du côté de la librairie xstream : http://xstream.codehaus.org/

    Pour ne pas avoir à parser toutes les données, tu peux créer un Converter dans lequel tu mets les conditions du parsing... bien-sûr tu seras quand même obligé de lire tout le fichier, or ce n'est pas ton but si j'ai bien compris.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ton fichier xml, quand tu le lit "au fil du temps", il est complet ou il ne contient pas les balises de fin? Dopnc au final, est-ce que l'application écrase au fur et à mesure la fichier de la main (ou tu du moins sa fin) pour y ajouter ses donnée ou est-ce que, au contraire, elle n'écrit la balise de fin qu'à la tout fin de l'opération de log.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2009
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 28
    Par défaut
    Citation Envoyé par xtope Voir le message
    Je ne sais pas si ça va t'aider, mais regarde du côté de la librairie xstream : http://xstream.codehaus.org/

    Pour ne pas avoir à parser toutes les données, tu peux créer un Converter dans lequel tu mets les conditions du parsing... bien-sûr tu seras quand même obligé de lire tout le fichier, or ce n'est pas ton but si j'ai bien compris.
    Je regarde, mais effectivemment je ne veux pas relire tout le flux XML. Seulement la dernière main ajoutée. Les temps de réponse sont critiques (le temps de réflexion est limité au poker !)

    Citation Envoyé par tchize_ Voir le message
    Ton fichier xml, quand tu le lit "au fil du temps", il est complet ou il ne contient pas les balises de fin? Dopnc au final, est-ce que l'application écrase au fur et à mesure la fichier de la main (ou tu du moins sa fin) pour y ajouter ses donnée ou est-ce que, au contraire, elle n'écrit la balise de fin qu'à la tout fin de l'opération de log.
    La balise de fin du fichier XML est déjà dans le fichier XML. Je ne l'ai pas fait figurer dans l'extrait que j'ai publié, mais l'historique complet comme par un tag <session> et se termine par un </session>.
    A chaque fin de main jouée, l'appli insère un fragment XML du type de celui que j'ai posté et qui commence par <game> et se termine par </game>

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par zorglubpok Voir le message

    A chaque fin de main jouée, l'appli insère un fragment XML du type de celui que j'ai posté et qui commence par <game> et se termine par </game>
    Donc en réalité l'appli écrase le fichier à chaque fin de main. Tu n'aura donc pas de choix, il te faut relite tour le fichier à chaque fois. Si tu utiliser un parseur de type SAX qui est évenementiel, tu peux éventuellement t'arranger pour ignorer les N premières main lorsque tu recois des events de début de balise/fin de balise, mais SAX lui même devra repasser sur tout, ou alors ce sera de la méchante bidouille qui en vaux pas le coup.

Discussions similaires

  1. [SimpleXML] Parser un flux xml avec SimpleXMLElement
    Par DeezerD dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 22/11/2006, 18h07
  2. [C#] Comment parser un flux XML ?
    Par Dunkan dans le forum C#
    Réponses: 1
    Dernier message: 22/09/2006, 13h32
  3. Parser un flux XML
    Par Paulux1 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 31/07/2006, 09h07
  4. parser un flux xml provenant d'une anim flash
    Par pyd001 dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2006, 10h43

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