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 :

Lecture XML par XmlSax [SAX]


Sujet :

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

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 55
    Points : 62
    Points
    62
    Par défaut Lecture XML par XmlSax
    Bonjour,
    J'ai un problème avec la lecture des fichiers XML par SAXParser (il y a longtemps que je l'ai réalisé, je me rappel plus des syntaxes et des traitements).
    En effet, dans le 99.9% des cas, tous ce passe très bien, il me retourne les enregistrement sans erreur.
    Mais dans un certain nombre de cas, uniquement lorsque le fichier est très grand. Il ne récupère pas une partie des données.

    1ère question: est-ce que cela vous est déjà arrivé?
    2ème question: qu'est-ce que vous avez fait pour y remédier?

    Je vous remercie par avance, étant en week-end, je vous réponderai pour plus amples informations que lundi.

  2. #2
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Bonjour

    Tu as de la chance, ça m'est déjà arrivé. Voici ce que j'avais découvert dans la javadoc de ContentHandler.characters :

    Citation Envoyé par javadoc
    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.

    The application must not attempt to read from the array outside of the specified range.

    Individual characters may consist of more than one Java char value. There are two important cases where this happens, because characters can't be represented in just sixteen bits. In one case, characters are represented in a Surrogate Pair, using two special Unicode values. Such characters are in the so-called "Astral Planes", with a code point above U+FFFF. A second case involves composite characters, such as a base character combining with one or more accent characters.

    Your code should not assume that algorithms using char-at-a-time idioms will be working in character units; in some cases they will split characters. This is relevant wherever XML permits arbitrary characters, such as attribute values, processing instruction data, and comments as well as in data reported from this method. It's also generally relevant whenever Java code manipulates internationalized text; the issue isn't unique to XML.

    Note that some parsers will report whitespace in element content using the ignorableWhitespace method rather than this one (validating parsers must do so).

    Parameters:
    ch - the characters from the XML document
    start - the start position in the array
    length - the number of characters to read from the array
    Throws:
    SAXException - any SAX exception, possibly wrapping another exception
    See Also:
    ignorableWhitespace(char[], int, int), Locator

    Regarde ce que j'ai mis en gras. En gros, la méthode character() peut être appellé deux fois pour la même balise. Ceci se passait qu'avec des gros fichiers (comme ton cas).

    sur le startElement, tu construit un StringBuffer.
    sur le characters, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonStringBuffer.append(new String(ch, start, length));
    tu traites les caractères sur le endElement en récupérant le contenu de ton StringBuffer.

    voili voilou

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 55
    Points : 62
    Points
    62
    Par défaut
    Avec mes remerciements

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 55
    Points : 62
    Points
    62
    Par défaut
    Pour information

    Après correction, j'ai trouvé le problème.
    Je réalisais le append dans characters() mais quand la fin des données arrivaient exactement avec la fin du buffer, je ne récupérais pas la variable.
    J'ai corriger le problème et c'est ok.

    Merci encore

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

Discussions similaires

  1. probléme a la lecture de XML par php
    Par ilameq dans le forum Langage
    Réponses: 3
    Dernier message: 30/03/2011, 14h05
  2. Lecture xml par adresse URL
    Par grigou25 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 30/10/2010, 19h05
  3. lecture d un fichier xml par xsl
    Par reudodviking dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/10/2007, 23h19
  4. Réponses: 2
    Dernier message: 20/06/2007, 10h16

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