Précédent   Forum des professionnels en informatique > Autres langages > XML/XSL et SOAP
XML/XSL et SOAP Forum d'entraide sur XML et SOAP. Avant de poster -> FAQ XML, Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/01/2012, 11h50   #1
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 1
Points : 1
Par défaut Lire xml volumineux avec java

Bonjour tous le monde,
j'ai essayé d'utiliser l'API JDOM pour lire un fichier xml
lorsque j'ai utiliser un petit fichier de 7mo , mon programme s'exécute
mais le problème qu'avec un fichier de taille supérieur (290Mo!) le programme se bloque et il m'affiche l'erreur suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOfRange(Unknown Source)
	at java.lang.String.<init>(Unknown Source)
	at org.jdom.input.TextBuffer.append(TextBuffer.java:105)
	at org.jdom.input.SAXHandler.characters(SAXHandler.java:738)
	at org.apache.xerces.parsers.AbstractSAXParser.characters(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanContent(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
	at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
	at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
	at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:518)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:905)
	at org.jdom.input.SAXBuilder.build(SAXBuilder.java:884)
	at JDOM2.main(JDOM2.java:21)
j'ai compris que le JDOM n'a pas assez de mémoire pour générer l'arbre de tout le fichier donc comment je peut augmenter cette taille! ou bien utiliser une partie du disque dur pour l'utiliser par le programme
merci pour vos aides
ARAMYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 12h01   #2
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 092
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 092
Points : 7 019
Points : 7 019
Citation:
Envoyé par ARAMYS Voir le message
j'ai compris que le JDOM n'a pas assez de mémoire pour générer l'arbre de tout le fichier donc comment je peut augmenter cette taille!
JDOM n'est qu'une bibli Java. Pour augmenter sa mémoire disponible, il suffit d'augmenter la mémoire disponible pour Java.

Mais bien entendu, il y a une limite à tout ça. Ça devrait passer avec un fichier de 300Mo, mais ça n'ira pas beaucoup plus loin.

Il vaut mieux éviter de charger les gros fichiers XML en mémoire. Pour ça, il ne faut pas utiliser les DOM, mais SAX ou StAX.
C'est plus compliqué, mais la réduction d'utilisation mémoire est à ce prix.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 12h08   #3
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 1
Points : 1
Merci pour la réponse rapide
le problème que j'ai pas des connaissances en SAX ou Stax!
qu'il est le meilleur parmis ces deux!? un exemple clair pour l'utilisation svp
est ce que je peut découper mon fichier xml en plusieurs fichiers et utiliser le jdom! (découpage automatique)
merci à vous
ARAMYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 12h28   #4
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 092
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 092
Points : 7 019
Points : 7 019
Citation:
Envoyé par ARAMYS Voir le message
le problème que j'ai pas des connaissances en SAX ou Stax!
Ben oui, c'est bien plus simple avec JDOM qui s'occupe de tout à notre place, mais quand ça peut pas, ça peut pas.

Citation:
Envoyé par ARAMYS Voir le message
qu'il est le meilleur parmis ces deux!?
Question de goût.

- Il est plus difficile de programmer avec SAX, parce qu'il utilise une logique événementielle, et ne le fait pas très bien. Par contre, c'est géré par tout et sans difficulté, il y a des tutoriels tous les 5 mètres.

- Il est plus facile de programmer avec StAX, parce qu'il a la logique classique. Par contre, personne ne connaît cet extraterrestre, il ne s'intègre pas aussi bien que SAX, on a moins de doc dessus.

Citation:
Envoyé par ARAMYS Voir le message
un exemple clair pour l'utilisation svp
Dis, hé, tu as Google, oui ?

Un cours sur SAX et une doc Java officielle pour s'en servir (à partir du Chapitre 5 : Simple API for XML). (Attention, quand on dit "simple," c'est simple pour l'ordinateur, pas pour nous.)

Un cours sur StAX

Une rapide description de la différence entre les deux.


Citation:
Envoyé par ARAMYS Voir le message
est ce que je peut découper mon fichier xml en plusieurs fichiers et utiliser le jdom! (découpage automatique)
Pas automatiquement. L'idée n'est pas spécialement mauvaise, mais JDOM ne va pas le faire à ta place.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 12h39   #5
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : janvier 2012
Messages : 7
Points : 1
Points : 1
Merci pour vos explications
Pour l'idée de découpage, je veut dire que je dois développer une application qui permet la découpage du fichier xml et par la suite utiliser le jdom sur les petits fichiers.
mais là j'ai un problème: mon fichier xml volumineu est écrit dans une seule ligne, alors je peut pas le lire ligne par ligne donc j'ai pensé à le lire chaine par chaine mais j'ai pas trouvé comme le faire!
exemple:
Code :
<?xml version="1.0" encoding="ISO_8859-1" ?> <personnes> <etudiant classe="P1"> <nom> Supeérwoman</nom> </etudiant> <etudiant classe="P1"> <nom> Don Corleone</nom> </etudiant> </personnes>
besoin:
je veut découper ce fichier, chaque petit fichier contient un seul etudiant

c un exemple simple juste pour expliquer mon problème, réellement mon fichier xml est plus compliqué
ARAMYS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 14h12   #6
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 092
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 092
Points : 7 019
Points : 7 019
Citation:
Envoyé par ARAMYS Voir le message
Pour l'idée de découpage, je veut dire que je dois développer une application qui permet la découpage du fichier xml et par la suite utiliser le jdom sur les petits fichiers.
J'avais compris, mais ça ne peut pas se faire automatiquement sans rien comprendre à SAX ou StAX, non.
Par contre, après avoir appris à s'en servir, c'est un moyen de profiter des facilités de JDOM sans charger la totalité du fichier en mémoire. Ce n'est pas le seul.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h22.


 
 
 
 
Partenaires

Hébergement Web