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 :

[SAX] Utiliser XPath avec Sax


Sujet :

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

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2005
    Messages
    97
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2005
    Messages : 97
    Points : 78
    Points
    78
    Par défaut [SAX] Utiliser XPath avec Sax
    Bonjour,

    Je souhaiterais évaluer une expression XPath en utilisant un parser Sax car j'aurai à terme de gros fichiers à gérer.
    J'ai trouvé le code suivant dans la FAQ XPath mais j'obtiens une exception "Java heap space" alors que le fichier ne devrait pas être chargé en mémoire.


    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
    		try {
    			// création de la source Sax
    			InputSource source = new InputSource(new FileInputStream(
    					"c:\\extraction_cleva.xml"));
     
    			// création du XPath
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
    			long currentTimeMillis = System.currentTimeMillis();
    			// évaluation de l'expression XPath
    			XPathExpression exp = xpath
    					.compile("//POLICE[POL_NUMPOL ='004036941']/DOSSIER");
    			Object resultat = exp.evaluate(source, XPathConstants.NODESET);
    			System.out.println(resultat + " "
    					+ (System.currentTimeMillis() - currentTimeMillis));
    		} catch (XPathExpressionException xpee) {
    			xpee.printStackTrace();
    		} catch (IOException ioe) {
    			ioe.printStackTrace();
    		}
    extraction_cleva.xml est un fichier de 28 Mo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    	at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.getNodeObject(DeferredDocumentImpl.java:1067)
    Avez-vous une idée, est-ce que les requêtes XPath sont compatibles avec une parser Sax?

    Merci.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 619
    Points
    21 619
    Par défaut
    Compatible oui. Mais par nature, il est impossible d'évaluer un XPath sur un document sans le charger en mémoire.

    La raison en est simple : comment t'y prendrais-tu pour évaluer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "//A[AB = //B and AC = //C and AD = //D]"
    Pas le choix, il faut charger en mémoire.

    On pourrait souhaiter que le moteur XPath soit "intelligent" et détecte que l'évaluation qu'on lui demande puisse être faite à la volée, et qu'il la fasse à la volée sur les sources SAX.
    Mais à ma connaissance, ce n'est pas le cas.

  3. #3
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 084
    Points
    7 084
    Par défaut
    On pourrait penser que le parseurhandler SAX d'XPath soit suffisemment intelligent pour garder le minimum de contexte nécessaire à la résolution de la requête.

    Par ailleurs, on est pas obligé d'utiliser DOM pour appliquer une transformation XSL ?


    Ceci dit là où je travaille nous utilisons une bibliothèque interne qui "indexe" le contenu XML pour améliorer les temps de traitement. Pourquoi ne pas chercher ce type de solution, par exemple des bases de données XML ?

Discussions similaires

  1. [Selenium] Utiliser xpath avec Selenium
    Par khaled69100 dans le forum Tests et Performance
    Réponses: 2
    Dernier message: 13/08/2007, 09h50
  2. [Xerces] probleme avec SAX
    Par hitchie dans le forum MFC
    Réponses: 9
    Dernier message: 03/03/2006, 14h40
  3. [Conseil][Amélioration]Parser un Document (JDOM) avec SAX
    Par leminipouce dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 19/12/2005, 14h30
  4. [SAX] Utilisation du package contenant org.apache.xerces.par
    Par Sphost dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 17/01/2005, 11h07
  5. [SAX] parsing avec sax
    Par jdar dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 03/12/2004, 21h34

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