XML

XML - Java - Programmation

Marsh Posté le 31-05-2004 à 19:06:15    

Bonjour,
 Bienvenue à moi, c'est mon premier sos dans ce forum. j'ai un pb pour parser le fichier Translators.xml (que j'ai écris moi même avec Dom), mais ça ne marche pas.
Il n'ya pas des erreurs de compilation, donc les packages sont bien configurés, mais à l'exécution il me donne l'erreur  de NullPointerException à la ligne :  
typeClass=(String)eleMapNode.getNodeName();  
 
Donc il ne reconait pas les childs de <TranslatorMap> !
 
S'il vous plait, comme c'est assez urgent, pouvez-vous me répondre au plus vite!
Merci d'avance,[quote]
 
voici le code:
import java.io.*;
import javax.xml.parsers.*;  
//import com.sun.xml.tree.*;
import org.w3c.dom.*;
import java.util.*;
 
public class test{
 
public static void main (String argv []) throws DOMException {
     
     
     HashMap m_transMap =new HashMap();        
           try {
 
                Node titleNode,countNode,MapNode,eleMapNode;
                String count,typeClass,transClass;
 
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
               
                 DocumentBuilder builder = factory.newDocumentBuilder();
               
                 FileInputStream fis = new FileInputStream(new File("translators.xml" ));
 
 
 
                Document docTrans = builder.parse(fis);
               
                 
 
 
                titleNode = docTrans.getChildNodes().item(0);
               
                countNode= titleNode.getChildNodes().item(1);
                   
                Node mapNode=titleNode.getChildNodes().item(2);
                   
                Text countText = (Text)countNode.getChildNodes().item(0);
                count =countText.getData();
                 
             
 
                for (int i = 0; i < new Integer(count).intValue(); i++) {
                 
                eleMapNode=mapNode.getChildNodes().item(i);
 
                typeClass=(String)eleMapNode.getNodeName();
                 // System.out.println("typeClass="+ typeClass);    
                transClass=(String)(eleMapNode.getAttributes().item(0)).getNodeValue();
 
 
             
                Class clazz = Class.forName(transClass);
                m_transMap.put(typeClass, clazz.newInstance());
 
                                 
                  }
                 
              }  
 
                catch (ParserConfigurationException pce) {
 
                   
                pce.printStackTrace();
 
                     }
           
            catch(Exception ex){
               
                ex.printStackTrace();
                }
             
 
           }
}
 
 
Voici le fichier translators.xml
 
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>  
- <DataStorage DataStorage="DataOfTranslators">
  <NumberofTranslators>16</NumberofTranslators>  
- <TranslatorMap>
  <java.lang.String value="org.ungoverned.radical.util.translator.StringTranslator" />  
  <javax.swing.border.TitledBorder value="org.ungoverned.radical.util.translator.BorderTranslator" />  
  <javax.swing.border.MatteBorder value="org.ungoverned.radical.util.translator.BorderTranslator" />  
  <java.lang.Short value="org.ungoverned.radical.util.translator.ShortTranslator" />  
  <java.lang.Character value="org.ungoverned.radical.util.translator.CharacterTranslator" />  
  <java.lang.Long value="org.ungoverned.radical.util.translator.LongTranslator" />  
  <javax.swing.border.SoftBevelBorder value="org.ungoverned.radical.util.translator.BorderTranslator" />  
  <javax.swing.border.BevelBorder value="org.ungoverned.radical.util.translator.BorderTranslator" />  
  <java.awt.Color value="org.ungoverned.radical.util.translator.ColorTranslator" />  
  <java.lang.Double value="org.ungoverned.radical.util.translator.DoubleTranslator" />  
  <java.lang.Integer value="org.ungoverned.radical.util.translator.IntegerTranslator" />  
  <javax.swing.border.LineBorder value="org.ungoverned.radical.util.translator.BorderTranslator" />  
  <javax.swing.border.EtchedBorder value="org.ungoverned.radical.util.translator.BorderTranslator" />  
  <java.lang.Float value="org.ungoverned.radical.util.translator.FloatTranslator" />  
  <java.lang.Boolean value="org.ungoverned.radical.util.translator.BooleanTranslator" />  
  <javax.swing.border.EmptyBorder value="org.ungoverned.radical.util.translator.BorderTranslator" />  
  </TranslatorMap>
  </DataStorage>

Reply

Marsh Posté le 31-05-2004 à 19:06:15   

Reply

Marsh Posté le 31-05-2004 à 19:12:03    

deja utilises les balises [cpp] pour rendre ton code plus lisible ;)


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 31-05-2004 à 19:19:19    

Tu t'fais quand même pas mal chier :/
Déjà, pour les NullPointer, c'est passke tu testes pas ce que te retournent les méthodes de get et autres item(). C'est mal :o
Ensuite, pour récupérer les élements qui t'intéressent, vas-y plutôt à coups de getElementsByName(), ça ira plus vite que de faire des getChildNodes() dans tous les sens.
Sinon, faire un noeud pour compter les noeuds suivants... c'est crade. T'as la méthode getLength() dans NodeList qui fait déjà tout ça [:spamafote]
Enfin et pour terminer : tes noms de tags XML sont euh... pas très standards !


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 31-05-2004 à 19:22:08    

Ce que je ferais moi :
* parsing (en catchant bien les exceptions, sans faire un catch(Exception) de bourrin :o)
* NodeList mapList = document.getElementsByTagName("TranslatorMap" );
* if(mapList != null)
    count = mapList.getLength();
* boucle for, traitements, etc... avec les bons tests d'éléments non null.
Et roule :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 31-05-2004 à 19:41:24    

Merci pour les réponses "non utiles"!
Jûsqu'à maintenant, je n'ai reçu que des remarques sur le code, que je vais modifier!
Rien sur le conteneu:
Ma question est loin de ce que vous m'avez répondu tous:Le tag  
<TranslatorMap> a normalement 16 childs:)-je ne suis pas entrain d eles compter, je sais qu'il y a getLength dans hashSet et nodeList....
Je ne comrends pas pourquoi (même en faisant le test avec print), ça me dit qui'il n'a pas de child!
Alors, svp donner moi une réponse utile et au fond du sujet!
 

Reply

Marsh Posté le 31-05-2004 à 19:43:10    

wafae a écrit :


Ma question est loin de ce que vous m'avez répondu tous:Le tag


bon tu le met ce p..... de tag cpp! [:mmmfff]


Message édité par schnapsmann le 31-05-2004 à 19:43:20
Reply

Marsh Posté le 31-05-2004 à 19:47:00    

wafae a écrit :


Alors, svp donner moi une réponse utile et au fond du sujet!


[:xx_xx]
Eh oh Bob, si tu te bouffes une NullPointer, c'est d'une part passke tu mates pas les retours que te font les méthodes que tu appelles et d'autre part passke tu ne te situes pas là où tu devrais te situer.
Le problème n'est pas un problème de fond comme tu as l'air de le croire ; c'est un problème de méthode et d'implémentation. Y a pas de problème métaphysique qui fait que le parser se viande tout seul, c'est juste que ton code étant quand même bien complexe pour parser une liste de noeuds, j'te donne des billes pour le simplifier et voir ce qui réparerait éventuellement le truc.
 
Sinon, une autre remarque "non utile" : rajoute des traces pour savoir ce qui se passe exactement dans ta boucle (et même avant, pour savoir ce que vaut count).


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 31-05-2004 à 20:13:48    

J 'ai toujours lês mêmes erreurs, vous pouvez essayez vous aussi, il ya un problème de parsage!
Comme je vous dis j'ai fais le print pour tester..

Reply

Marsh Posté le 31-05-2004 à 21:02:12    

ton erreur vient juste du fait que tu ne fais pas attention aux nodes que tu récupèrent : dans un document XML, beaucoups de noeuds sont des noeuds Texte ...

Reply

Marsh Posté le 31-05-2004 à 21:03:09    

wafae a écrit :


Comme je vous dis j'ai fais le print pour tester..


surement pas parce que tu te serais vite rendu compte que ta boucle for est fait sur un noeud de type text et pas le noeud TranslatorMap ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed