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 :

contenu tronqué lors du parsing [SAX]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut contenu tronqué lors du parsing
    :hello:

    J'ai un problème de parsing avec Sax : je ne sais pas trop pourquoi mais il arrive (très rarement) que certaines données soient tronquées.

    Voici un bout de fichier XML que je parse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      <doCaptureRequest date="20090323 19:02:44" sequence="2033">
        <payment>
          <message>WEB</message>
          <language>FR</language>
          <order_date>20090323</order_date>
        </payment>
      </doCaptureRequest>
    Ici, il me récupère mal la valeur de order_date : en fait il y a un décalage des offsets dans la méthode characters de l'implémentation du ContentHandler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public void characters(char[] ch, int start, int end) throws SAXException {
    		String data = (new String(ch, start, end)).trim();
    S'il y a beaucoup de données à traiter, il se plante (toujours au même endroit). En pratique, il va tronquer le order_date précédent (identique, donc 2009032 au lieu de 20090323) et mettre le reste dans le order_date courant (soit "3"). Le fichier XML est correct, si je mets les lignes incriminées à un autre endroit du fichier, ça passe.

    De quoi ça peut venir ? Comment résoudre ce problème, car là j'ai pu voir l'erreur car je parse la date avec un SimpleDateFormat, mais dans le cas de données textuelles, je ne pourrai même pas savoir si elles sont correctes...

    Merci de votre aide !

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    c'est parce que plusieurs évènements "Characters" peuvent se suivre.

    Je pense que le parser envoies 2 évènements à la suite.

    En pratique tu devrais concaténer chaque groupe de caractères et traiter lors d'un EndElement

    void characters(char[] ch,
    int start,
    int length)
    throws SAXException

    Receive notification of character data.

    The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Oui mais pourquoi, dans mon fichier qui comporte plusieurs centaines d'enregistrements, il splitte à un certain endroit et pas ailleurs ? D'autant que cette date n'a absolument rien de particulier, il y a beaucoup d'autres enregs avec la même date. J'ai l'impression que ça vient d'un dépassement de capacité des entiers (étonnant car j'ai pas 4 milliards de caractères dans mon fichier), mais comme si à un moment ça fait trop et il tronque.

    Comment être sûr d'avoir la chaine complète ? Je vois pas trop comment concaténer dans la méthode EndElement.

  4. #4
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Bon alors, autant pour moi, il suffisait d'augmenter le buffer lors de l'instanciation du parser. Y'a des fois je me complique vraiment la vie

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    Ca ne change rien, tu reportes le problème sur un enregistrement un peu + loin.

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 108
    Par défaut
    Oui, effectivement. Je pensais que le buffer était sous-dimensionné et que ça résoudrait le problème, mais l'erreur vient de se reproduire. Je vais essayer de valuer mes champs dans le endElement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Effacer contenu JTextField lors d'un clic
    Par javamax dans le forum Composants
    Réponses: 3
    Dernier message: 07/04/2007, 17h04
  2. [DOM] Erreur I/O lors du parsing d'une string
    Par jakouz dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 19/04/2006, 18h08
  3. [XHR]pb lors du parsing du XML(il n'existe pas)
    Par hansaplast dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/03/2006, 13h55
  4. [DOM] Erreur lors du parsing d'un fichier XML par l'API DOM
    Par patricetoan dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 26/09/2005, 12h43
  5. Réponses: 33
    Dernier message: 15/10/2004, 16h19

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