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

Entrée/Sortie Java Discussion :

Parser un fichier avec sax


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut Parser un fichier avec sax
    salut,

    j'essaye de parser un fichier xml avec sax, mon programe tourne bien avec plusieurs fichiers xml sauf que sur mon fichier xml ça passe pas plutôt ça commence dés la moitié du fichier et non pas du début

    voila mon code
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    package ParseXMLAndCo;
     
        import java.io.FileReader;
        import org.xml.sax.XMLReader;
        import org.xml.sax.Attributes;
        import org.xml.sax.InputSource;
        import org.xml.sax.helpers.XMLReaderFactory;
        import org.xml.sax.helpers.DefaultHandler;
        import java.util.List;
     
        public class MySAXHandler extends DefaultHandler
        {
            public MySAXHandler()
            {
            super();
            }
            ////////////////////////////////////////////////////////////////////
            // Event handlers.
            ////////////////////////////////////////////////////////////////////
            public void startDocument ()
            {
            System.out.println("Start document");
            }
            public void endDocument ()
            {
            System.out.println("End document");
            }
            public void startElement (String uri, String name,
                          String qName, Attributes atts)
            {
            if ("".equals (uri))
                System.out.println("Start element: " + qName);
            else
                System.out.println("Start element: {" + uri + "}" + name);
            }
            public void endElement (String uri, String name, String qName)
            {
            if ("".equals (uri))
                System.out.println("End element: " + qName);
            else
                System.out.println("End element:   {" + uri + "}" + name);
            }
            public void characters (char ch[], int start, int length)
            {
            System.out.print("Characters:    \"");
            for (int i = start; i < start + length; i++) {
                switch (ch[i]) {
                case '\\':
                System.out.print("\\\\");
                break;
                case '"':
                System.out.print("\\\"");
                break;
                case '\n':
                System.out.print("\\n");
                break;
                case '\r':
                System.out.print("\\r");
                break;
                case '\t':
                System.out.print("\\t");
                break;
                default:
                System.out.print(ch[i]);
                break;
                }
            }
            System.out.print("\"\n");
            }
        }
    ma classe main
    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
    21
     
    package ParseXMLAndCo;
    import org.xml.sax.*;
    import org.xml.sax.helpers.XMLReaderFactory;
    import java.io.FileReader;
     
    public class Test {
     
         public static void main (String args[])
            throws Exception
            {
            XMLReader xr = XMLReaderFactory.createXMLReader();
            MySAXHandler handler = new MySAXHandler();
            //Le handler ainsi créé doit être affecté au parser à l'aide de la méthode setContentHandler.
                xr.setContentHandler(handler);
                xr.setErrorHandler(handler);
                FileReader r = new FileReader("Quiz.xml");
                xr.parse(new InputSource(r));
            //}
            }
    }
    des idées????

  2. #2
    Membre actif
    Homme Profil pro
    Analyst
    Inscrit en
    Juillet 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyst
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 150
    Points : 217
    Points
    217
    Par défaut Fichier
    Salut,
    Effectivement, le programme fonctionne bien sur des cas perso.
    Pour ton fichier qui ne passe pas, peux tu en indiquer le contenu (et bien entendu le reduire jusqu'à la limite où le cas se produit )
    Le probleme se reproduit il si tu recréé un fichier en copiant le contenu ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    pour mon fichier il contient plus de 3400 lignes mais une fois j'essaye sur 1900 ça marche:s

    une fois je dépasse ça bloque


    des idées

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Peut-être un problème de heap size.
    Quelle est l'erreur renvoyée au juste ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    433
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 433
    Points : 112
    Points
    112
    Par défaut
    justement il y a pas une erreur sauf il retourne juste la moitié du fichier
    mon soucis mnt c'est comment faire pour récupérer la liste des item à l'aide des l'événement evenmentstart

    voila mon code
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    public class MySAXHandler extends DefaultHandler
        {
            QuestionBank question =new QuestionBank();
            ArrayList<Test> test = new ArrayList<Test>();
            ArrayList<Item> item= new ArrayList<Item>();
            ArrayList<Response> responses=new ArrayList<Response>();
            public MySAXHandler()
            {
            super();
            }
            ////////////////////////////////////////////////////////////////////
            // Event handlers.
            ////////////////////////////////////////////////////////////////////
            public void startDocument ()
            {
            System.out.println("Start document");
            }
            public void endDocument ()
            {
            System.out.println("End document");
            question.setTest(test);
        question.getTest().get(0).affiche();
        question.getTest().get(1).affiche();
            }
            public void startElement (String uri, String name,
                          String qName, Attributes atts)
            {
            if ("".equals (uri))
            {
                System.out.println("Start element : " + qName);
                if (qName.equals("Test"))
                {
                    Test new_test=new Test();
                    new_test.setDescription((String)atts.getValue(0));
                    new_test.setTotalQuestions((String)atts.getValue(6));
                    test.add(new_test);    
                }
                else
                {
                    Item new_item=new Item();
                     if (qName.equals("Item"))
                        {
                         new_item.setQuestionId(Integer.parseInt(atts.getValue(0)));
                         new_item.setCategory((atts.getValue(1)));
                         new_item.setLevelQues((atts.getValue(3)));
                         new_item.setType((atts.getValue(4)));
                        }
                     else
                     {
                         if (qName.equals("statement"))
                            {
                             new_item.setStatement(name);
                            }
                         else
                             if (qName.equals("explanation"))
                                {
                                 new_item.setExplanation(name);
     
                                }
                     }
     
                }
                }
     
            else
                System.out.println("Start element: {" + uri + "}" + name);
     
            }
     public void endElement (String uri, String name, String qName)
            {
            if ("".equals (uri))
                System.out.println("End element: " + qName);
     
            else
                System.out.println("End element:   {" + uri + "}" + name);
            }
    }
    au fait voila mon fichier xml
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    <QuizBank>
    <Test name="Quiz" time="1200" time_remaining="1200" evaluation_flag="2" no_of_attempted="12" no_of_correct_answer="5" total_questions="25" total_marks="25" marks="7" remarks="Pass" text_result_analysis="You have to improve your tech skills">
            <property>
                <description>This test is to check the evaluate the ability of a Java Programer</description>
                <instruction>Do not Cheat</instruction>
            </property>
            <item questionId="1" category="Fundamental Object-Oriented Concepts" topic="Fundamental Object-Oriented Concepts" level="Beginner" type="Single Choice" no_of_correct_choices="1" negative_marking="false" partial_marking="false" time="-5" evaluation_flag="false" total_marks="1" negative_marks="0">
                <statement><![CDATA[
    Which of the given keywords is used to declare an enumerated type?
    ]]></statement>
                <explanation><![CDATA[
    Choice B is the correct answer.
     
    The keyword 'enum' is used to declare an enumerated type in Java. 
     
    Hence, choices A and C are automatically incorrect.
    ]]></explanation>
                <resources show="false"/>
                <responses>
                    <response name="A" correct="false" marks="0"><![CDATA[
    enums]]></response>
                    <response name="B" correct="true" marks="1"><![CDATA[
    enum]]></response>
                    <response name="C" correct="false" marks="0"><![CDATA[
    enumtype]]></response>
                </responses>
            </item>
            <item questionId="2" category="Fundamental Object-Oriented Concepts" topic="Fundamental Object-Oriented Concepts" level="Intermediate" type="Multiple Choice" no_of_correct_choices="2" negative_marking="false" partial_marking="false" time="-5" evaluation_flag="false" total_marks="1" negative_marks="0">
                <statement><![CDATA[
    Which of the given options can extend an abstract class?
    ]]></statement>
                <explanation><![CDATA[
    Choices B and C are the correct answers.
     
    An abstract class can be extended by another class whether it is abstract or concrete. If the subclass does not implement all the methods in its abstract superclass, then the subclass must be declared abstract. 
     
    Choice A is incorrect, because an interface cannot be extended by a class.
    ]]></explanation>
                <resources show="false"/>
                <responses>
                    <response name="A" correct="false" marks="0"><![CDATA[
    An interface]]></response>
                    <response name="B" correct="true" marks="1"><![CDATA[
    An abstract class]]></response>
                    <response name="C" correct="true" marks="1"><![CDATA[
    A concrete class 
    ]]></response>
                </responses>
            </item>
    </Test>
    </QuizBank>
    des idées?

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu pourrais déjà commencer par augmenter la taille de la mémoire (paramètre -Xmx:512m)

Discussions similaires

  1. [SAX] Les méthodes startElement et endElement : Parser un XML avec SAX
    Par Davesique dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 14/02/2011, 19h53
  2. [SAX] Parser un document avec SAX et récupérer les données
    Par sperca dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 06/12/2009, 14h51
  3. parser un fichier avec header
    Par czezko dans le forum Windows Forms
    Réponses: 8
    Dernier message: 08/01/2009, 14h52
  4. duree pour parser un fichier avec un script awk
    Par kass28 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/03/2008, 16h35
  5. parser un fichier avec xerces
    Par traiangueul dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 02/02/2004, 18h14

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