XML - Java - Programmation
Marsh Posté le 31-05-2004 à 19:12:03
deja utilises les balises [cpp] pour rendre ton code plus lisible
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
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
Enfin et pour terminer : tes noms de tags XML sont euh... pas très standards !
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 )
* 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
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!
Marsh Posté le 31-05-2004 à 19:43:10
wafae a écrit : |
bon tu le met ce p..... de tag cpp!
Marsh Posté le 31-05-2004 à 19:47:00
wafae a écrit : |
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).
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..
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 ...
Marsh Posté le 31-05-2004 à 21:03:09
wafae a écrit : |
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 ...
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>