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 :

Modifier un parser SAX


Sujet :

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

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Août 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1
    Par défaut Modifier un parser SAX
    Salut tout le monde

    J'ai écris le parser qui se trouve dans ce lien http://smeric.developpez.com/java/cours/xml/sax/ et ca marche bien.
    Mon problème est qu'il m'affiche tout le contenu du fichier xml, comment je peux le modifier pour que je puisse avoir que le contenu de certaine balise ?

    Merci d'avance.
    Je donne le code et le fichier xml :

    SimpleContentHandler.java
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    package org.mehdi.xml;
     
    import org.xml.sax.*;
    import org.xml.sax.helpers.LocatorImpl;
     
    /**
     * @author smeric
     *
     * Exemple d'implementation extremement simplifiee d'un SAX XML ContentHandler. Le but de cet exemple
     * est purement pedagogique.
     * Very simple implementation sample for XML SAX ContentHandler.
     */
    public class SimpleContentHandler implements ContentHandler {
     
    	private Locator locator;
     
            /**
             * Constructeur par defaut. 
             */
            public SimpleContentHandler() {
                    super();
                    // On definit le locator par defaut.
                    locator = new LocatorImpl();
            }
     
            /**
             * Definition du locator qui permet a tout moment pendant l'analyse, de localiser
             * le traitement dans le flux. Le locator par defaut indique, par exemple, le numero
             * de ligne et le numero de caractere sur la ligne.
             * @author smeric
             * @param value le locator a utiliser.
             * @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator)
             */
            public void setDocumentLocator(Locator value) {
                    locator =  value;
            }
     
            /**
             * Evenement envoye au demarrage du parse du flux xml.
             * @throws SAXException en cas de probleme quelquonque ne permettant pas de
             * se lancer dans l'analyse du document.
             * @see org.xml.sax.ContentHandler#startDocument()
             */
            public void startDocument() throws SAXException {
                    System.out.println("Debut de l'analyse du document");
            }
     
            /**
             * Evenement envoye a la fin de l'analyse du flux xml.
             * @throws SAXException en cas de probleme quelquonque ne permettant pas de
             * considerer l'analyse du document comme etant complete.
             * @see org.xml.sax.ContentHandler#endDocument()
             */
            public void endDocument() throws SAXException {
                    System.out.println("Fin de l'analyse du document" );
            }
     
            /**
             * Debut de traitement dans un espace de nommage.
             * @param prefixe utilise pour cet espace de nommage dans cette partie de l'arborescence.
             * @param URI de l'espace de nommage.
             * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String, java.lang.String)
             */
            public void startPrefixMapping(String prefix, String URI) throws SAXException {
                    System.out.println("Traitement de l'espace de nommage : " + URI + ", prefixe choisi : " + prefix);
            }
     
            /**
             * Fin de traitement de l'espace de nommage.
             * @param prefixe le prefixe choisi a l'ouverture du traitement de l'espace nommage.
             * @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)
             */
            public void endPrefixMapping(String prefix) throws SAXException {
                    System.out.println("Fin de traitement de l'espace de nommage : " + prefix);
            }
     
            /**
             * Evenement recu a chaque fois que l'analyseur rencontre une balise xml ouvrante.
             * @param nameSpaceURI l'url de l'espace de nommage.
             * @param localName le nom local de la balise.
             * @param rawName nom de la balise en version 1.0 <code>nameSpaceURI + ":" + localName</code>
             * @throws SAXException si la balise ne correspond pas a ce qui est attendu,
             * comme par exemple non respect d'une dtd.
             * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
             */
            public void startElement(String nameSpaceURI, String localName, String rawName, Attributes attributs) throws SAXException {
                    System.out.println("Ouverture de la balise : " + localName);
    if (localName=="string"){
                    if ( ! "".equals(nameSpaceURI)) { // espace de nommage particulier
                            System.out.println("  appartenant a l'espace de nom : "  + nameSpaceURI);
                    }
     
                    System.out.println("  Attributs de la balise : ");
     
                    for (int index = 0; index < attributs.getLength(); index++) { // on parcourt la liste des attributs
                            System.out.println("     - " +  attributs.getLocalName(index) + " = " + attributs.getValue(index));
                    }
    }
            }
     
            /**
             * Evenement recu a chaque fermeture de balise.
             * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
             */
            public void endElement(String nameSpaceURI, String localName, String rawName) throws SAXException {
                    System.out.print("Fermeture de la balise : " + localName);
     
                    if ( ! "".equals(nameSpaceURI)) { // name space non null
                            System.out.print("appartenant a l'espace de nommage : " + localName);
                    }
     
                    System.out.println();
            }
     
            /**
             * Evenement recu a chaque fois que l'analyseur rencontre des caracteres (entre
             * deux balises).
             * @param ch les caracteres proprement dits.
             * @param start le rang du premier caractere a traiter effectivement.
             * @param end le rang du dernier caractere a traiter effectivement
             * @see org.xml.sax.ContentHandler#characters(char[], int, int)
             */
            public void characters(char[] ch, int start, int end) throws SAXException {
                    System.out.println("#PCDATA : " + new String(ch, start, end));
            }
     
            /**
             * Recu chaque fois que des caracteres d'espacement peuvent etre ignores au sens de
             * XML. C'est a dire que cet evenement est envoye pour plusieurs espaces se succedant,
             * les tabulations, et les retours chariot se succedants ainsi que toute combinaison de ces
             * trois types d'occurrence.
             * @param ch les caracteres proprement dits.
             * @param start le rang du premier caractere a traiter effectivement.
             * @param end le rang du dernier caractere a traiter effectivement
             * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)
             */
            public void ignorableWhitespace(char[] ch, int start, int end) throws SAXException {
                    System.out.println("espaces inutiles rencontres : ..." + new String(ch, start, end) +  "...");
            }
     
            /**
             * Rencontre une instruction de fonctionnement.
             * @param target la cible de l'instruction de fonctionnement.
             * @param data les valeurs associees a cette cible. En general, elle se presente sous la forme 
             * d'une serie de paires nom/valeur.
             * @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String, java.lang.String)
             */
            public void processingInstruction(String target, String data) throws SAXException {
                    System.out.println("Instruction de fonctionnement : " + target);
                    System.out.println("  dont les arguments sont : " + data);
            }
     
            /**
             * Recu a chaque fois qu'une balise est evitee dans le traitement a cause d'un
             * probleme non bloque par le parser. Pour ma part je ne pense pas que vous
             * en ayez besoin dans vos traitements.
             * @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)
             */
            public void skippedEntity(String arg0) throws SAXException {
                    // Je ne fais rien, ce qui se passe n'est pas franchement normal.
                    // Pour eviter cet evenement, le mieux est quand meme de specifier une dtd pour vos
                    // documents xml et de les faire valider par votre parser.              
            }
     
    }
    SimpleSaxParser.java
    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
    package org.mehdi.xml;
     
    import java.io.IOException;
     
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.XMLReaderFactory;
     
    /**
     * Cette classe est livree tel quel.
     * @author smeric
     * @version 1.0
     */
    public class SimpleSaxParser {
     
            /**
             * Contructeur.
             */
            public SimpleSaxParser(String uri) throws SAXException, IOException {
                            XMLReader saxReader = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
                            saxReader.setContentHandler(new SimpleContentHandler());
                            saxReader.parse(uri);
            }
     
            public static void main(String[] args) {
    /*                if (0 == args.length || 2 < args.length) {
                            System.out.println("Usage : SimpleSaxParser uri [parserClassName]");
                            System.exit(1);
                    }*/
     
                    String uri = "bin/org/mehdi/ressources/jilali.xml";
     
                    String parserName = null;
                    if (2 == args.length) {
                            parserName = args[1];
                    }
     
                    try {
                            SimpleSaxParser parser = new SimpleSaxParser(uri);
                    } catch (Throwable t) {
                            t.printStackTrace();
                    }
            }
    }
    et le fichier xml
    jilali.xml
    Code xml : 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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    <?xml version="1.0" encoding="UTF-8"?> 
    <java version="1.6.0_14" class="java.beans.XMLDecoder"> 
     <object class="com.horstmann.violet.ClassDiagramGraph"> 
      <void method="addNode"> 
       <object id="ClassNode0" class="com.horstmann.violet.ClassNode"> 
        <void property="attributes"> 
         <void property="text"> 
          <string>nom:string</string> 
         </void> 
        </void> 
        <void property="name"> 
         <void property="text"> 
          <string>pere</string> 
         </void> 
        </void> 
       </object> 
       <object class="java.awt.geom.Point2D$Double"> 
        <void method="setLocation"> 
         <double>110.0</double> 
         <double>90.0</double> 
        </void> 
       </object> 
      </void> 
      <void method="addNode"> 
       <object id="ClassNode1" class="com.horstmann.violet.ClassNode"> 
        <void property="attributes"> 
         <void property="text"> 
          <string>age: int</string> 
         </void> 
        </void> 
        <void property="name"> 
         <void property="text"> 
          <string>fils</string> 
         </void> 
        </void> 
       </object> 
       <object class="java.awt.geom.Point2D$Double"> 
        <void method="setLocation"> 
         <double>110.0</double> 
         <double>260.0</double> 
        </void> 
       </object> 
      </void> 
      <void method="addNode"> 
       <object id="ClassNode2" class="com.horstmann.violet.ClassNode"> 
        <void property="attributes"> 
         <void property="text"> 
          <string>sexe:string</string> 
         </void> 
        </void> 
        <void property="name"> 
         <void property="text"> 
          <string>femme</string> 
         </void> 
        </void> 
       </object> 
       <object class="java.awt.geom.Point2D$Double"> 
        <void method="setLocation"> 
         <double>430.0</double> 
         <double>260.0</double> 
        </void> 
       </object> 
      </void> 
      <void method="connect"> 
       <object class="com.horstmann.violet.ClassRelationshipEdge"> 
        <void property="bentStyle"> 
         <object class="com.horstmann.violet.BentStyle" field="VHV"/> 
        </void> 
        <void property="endArrowHead"> 
         <object class="com.horstmann.violet.ArrowHead" field="TRIANGLE"/> 
        </void> 
       </object> 
       <object idref="ClassNode1"/> 
       <object idref="ClassNode0"/> 
      </void> 
      <void method="connect"> 
       <object class="com.horstmann.violet.ClassRelationshipEdge"> 
        <void property="bentStyle"> 
         <object class="com.horstmann.violet.BentStyle" field="HVH"/> 
        </void> 
        <void property="endArrowHead"> 
         <object class="com.horstmann.violet.ArrowHead" field="V"/> 
        </void> 
        <void property="endLabel"> 
         <string>1..4</string> 
        </void> 
        <void property="middleLabel"> 
         <string>marie a</string> 
        </void> 
        <void property="startLabel"> 
         <string>1</string> 
        </void> 
       </object> 
       <object idref="ClassNode1"/> 
       <object idref="ClassNode2"/> 
      </void> 
     </object> 
    </java>

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Tu mets des "if" dans les méthodes qui affichent les infos des balises. Si tu as beaucoup de tests à faire, tu peux stocker les noms à traiter dans un ArrayList et faire une boucle sur le tableau.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 8
    Par défaut SAXParseException
    Bonjour tout le monde,

    J'ai un problème de parsing d'un fichier xml, et je dois trouver une solution urgente

    J'aimerais bien, récupérer toute la branche du fichier xml qui présente une erreur lors du parsing...
    exp:
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <library>
       <book>
           <name>test</test>
           <auteur>aurteur</auteur>
           <prix>123<prix>
      </book>
    </library>

    ici la balise <prix>, présente une erreur, je veux que mon application me retoune la branche suivante:
    library->book->prix

    plzzzzzzzzzzzz help !!!!

Discussions similaires

  1. [XML] Problème avec le parser SAX
    Par carmensam dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 28/08/2009, 16h50
  2. Problème de parser SAX après déploiement
    Par guenievre dans le forum Java ME
    Réponses: 14
    Dernier message: 10/10/2007, 18h51
  3. [SAX] Parser SAX
    Par Imladir dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 13/01/2006, 17h32
  4. [SAX] Parser SAX
    Par tchouki dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 13/11/2005, 14h18
  5. [SAX] Parser SAX : connaitre l'état d'avancement
    Par GLA31 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 26/10/2004, 09h08

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