Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
761 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  java xml et parser sax

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

java xml et parser sax

n°869098
kungouf
Posté le 09-10-2004 à 16:51:01  profilanswer
 

bonjour a tous
 
j'utilise le parser SAX en java pour recuperer des donnees provenant d'un fichier xml, et mon probleme est le suivant:
 
j'ai un plantage au moment de stocker les donnees dans un tableau de la methode si bien connu des habitue de java et sax:
 
public void characters (char buf [], int offset, int len){}  
 
 
voici mon code:
 
 public void startDocument () throws SAXException {
        System.out.println("START DOCUMENT" );
        System.out.println("<?xml version='1.0' encoding='UTF-8'?>" );
    }
 
    public void endDocument () throws SAXException {
        System.out.println("END DOCUMENT" );
         
                 
        for(int var=0; var < tableauPeres.size(); var++){
         
         //debut nouveau rajout
         JPanel lpanel = new JPanel(new GridLayout(1,1));
       
      JLabel label = new JLabel("texte", SwingConstants.LEADING);
      //JLabel label = new JLabel(listeFils[var], SwingConstants.LEADING);
       
      label.setTransferHandler(new TransferHandler("text" ));
       
       
      //MouseListener listener = new DragMouseAdapter();
         //label.addMouseListener(listener);
 
         
         
         //affichage du titre
      //System.out.println("nom"+nomTag);
         TitledBorder t1 = BorderFactory.createTitledBorder((String) tableauPeres.get(var));
         
         lpanel.add(label);
         lpanel.setBorder(t1);
         application.add(lpanel);
         //fin nouveau rajout
         
        var++;
        }
         
        if (indentLevel > 0) System.out.println("AIEEEE" );
       
    }
 
    public void startElement (String name, AttributeList attrs)
  throws SAXException  {
        tabs();
         
   
        System.out.println("start element enclenche" );
        try{
      if(name == "Name" ){
       i = 0;
   }
      else if(name == "ServiceRef" ){
       i = 1;
      }
        }
        catch(Exception e){
         System.err.println(e);
        }
         
        System.out.print("<" + name);
        if (attrs != null) {
            for (int i = 0; i < attrs.getLength (); i++) {
                        System.out.println();
                        tabs();
                System.out.print("    " );
                System.out.print(attrs.getName (i));
                System.out.print(" = \"" );
                System.out.print(attrs.getValue (i));
                System.out.print("\"" );
            }
        }
 
        if (attrs.getLength() > 0) { System.out.println("" ); tabs(); }
        System.out.println(">" );
        indentLevel++;
    }
 
    public void endElement (String name) throws SAXException {
        indentLevel--;
        tabs();
        System.out.println("</" + name + ">" );
    }
 
    public void characters (char buf [], int offset, int len)
                                                      throws SAXException {
        String s = new String(buf, offset, len);
 
     
     if (!s.trim().equals("" )) {
      System.out.println("characters enclenche ->semaphore: " + i);
       
      if(i == 0){
       tableauPeres.add(s);
      }
      else
       tableauFils.add(s);
             
            tabs();
             
             
            System.out.println(s);
        }
    }
 
 
 
 
voila en gros ce qui se deroule dans mon programme:
1- parcours du fichier xml par le parser SAX
2- a chaque tag appel de la methode public void startElement() ->  
 
si le tag s'appelle "Name" (name == "Name" ), je met la valeur d'une variable i=0
sinon (si name == "ServiceRef" ) je met la valeur de la variable i=1
 
 
3- si le tag n'est pas vide (donc s'enclenche a chaque fois que je tombe sur un tag "Name" ou "ServiceRef" dans mon cas)
 
alors je stocke la donnee dans une collection en fonction du type de donnee dans la collection approprie:
 
if (!s.trim().equals("" )) {
      System.out.println("characters enclenche ->semaphore: " + i);
     
      if(i == 0){
       tableauPeres.add(s);
      }
      else
       tableauFils.add(s);
         

            tabs();
             
             
            System.out.println(s);
        }
 
 
 
voila ca devrais fonctionner, seulement voila au moment de l'affectation des valeurs dans le tableau voila ce que j'ai en output:
 
 
START DOCUMENT
<?xml version='1.0' encoding='UTF-8'?>

java.lang.NullPointerException
 at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:658)
 at org.apache.crimson.parser.Parser2.parse(Parser2.java:333)
 at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
 at org.xml.sax.helpers.XMLReaderAdapter.parse(XMLReaderAdapter.java:223)
 at javax.xml.parsers.SAXParser.parse(SAXParser.java:314)

start element enclenche
<Services
    xmlns = "http://www.hp.com/OV/opcsvc"
>
        start element enclenche
<Service>
                start element enclenche
<Label>
                </Label>
                start element enclenche
<Icon>
                </Icon>
                start element enclenche
<Name>
characters enclenche ->semaphore: 0
                        saga
                </Name>
                start element enclenche
<Source>
                        start element enclenche
<Composition>
                        </Composition>
                        start element enclenche
<ServiceRef>
characters enclenche ->semaphore: 1

 at javax.xml.parsers.SAXParser.parse(SAXParser.java:253)
 at SimpleSaxXml.<init>(SimpleSaxXml.java:44)
 at LabelDnD.<init>(LabelDnD.java:102)
 at LabelDnD.createAndShowGUI(LabelDnD.java:156)
 at LabelDnD.access$0(LabelDnD.java:147)
 at LabelDnD$1.run(LabelDnD.java:233)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:178)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:454)
 at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

 
 
quelqu'un sait d'ou l'erreur pourrait provenir?

mood
Publicité
Posté le 09-10-2004 à 16:51:01  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  java xml et parser sax

 

Sujets relatifs
Parser une structure XML en Java[Java] parser fichier CSV... JDBC ?
probleme pour parser un format notation scientifique (ex : e-179) JAVAQq'un connait un bon couple lexer/parser LALR en java?
[Java-XML] Arret de lecture d'un fichier XML avec un parser SAXJava/XML : Le Parser de Sun ?
Parser java xml ?[Java] parser, éditeur,.. des idées ?
[JAVA] Parser MIME (JavaMail)[Xerces ?] Parser du HTML en Java
Plus de sujets relatifs à : java xml et parser sax


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR