Bonjour,
Je me suis inspiré de la Faq Java sur ce site pour essayer de créer un fichier XML avec SAX.
Voici le code (partie essentielle) de mon reader
Voici la classe qui permet d'écrire
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 public void parse(InputSource source) throws IOException, SAXException { // TODO Auto-generated method stub if(!(source instanceof SeriesSource)) throw new SAXException("la source doit être un Objet \"SerieSource\""); if(contentHandler == null) throw new SAXException("le gestionnaire de contenu ne doit pas être null"); SeriesSource serie = (SeriesSource) source; ArrayList<Series> lserie = serie.getSeries(); contentHandler.startDocument(); contentHandler.startElement("", "vnr", "vnr", atts); for(Series ser:lserie){ ArrayList<Scenario> lsc = ser.getSerie(); atts.addAttribute("", "nomserie", "nomserie", "", ser.getNomDeSerie()); atts.addAttribute("", "option", "option", "", ser.getEnvOption()); contentHandler.startElement("", "serie", "serie", atts); atts.clear(); for(Scenario sc: lsc){ /*if(sc.getTimeOption()) atts.addAttribute("", "time", "time", "", "ok");*/ contentHandler.startElement("", "scenario", "scenario", atts); //debut du scenario atts.clear(); contentHandler.startElement("", "nom", "nom", atts); //debut de la balise nom char[] ch = sc.getNom().toCharArray(); contentHandler.characters(ch, 0, ch.length); contentHandler.endElement("", "nom","nom"); // fin de la balise nom contentHandler.startElement("", "param", "param", atts); ch = sc.getParam().toCharArray(); contentHandler.characters(ch, 0, ch.length); contentHandler.endElement("", "param", "param"); contentHandler.endElement("", "scenario", "scenario"); // fin du scenario } contentHandler.endElement("", "serie", "serie"); } contentHandler.endElement("", "vnr", "vnr"); contentHandler.endDocument(); } public void setContentHandler(ContentHandler cthdl) { // TODO Auto-generated method stub this.contentHandler = cthdl; } public ContentHandler getContentHandler() { // TODO Auto-generated method stub return contentHandler; }enfin je l'utilise comme ci
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 public class VnrWriter{ Transformer tr; VnrWriterHandler writerHandler; public VnrWriter(){ TransformerFactory fabrique = TransformerFactory.newInstance(); try { tr = fabrique.newTransformer(); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } tr.setOutputProperty(OutputKeys.INDENT, "yes"); tr.setOutputProperty(OutputKeys.ENCODING, "ISO-8859-1"); writerHandler = new VnrWriterHandler(); } public void xlmWriter(SeriesSource serieSource,File dest){ Source source = new SAXSource(writerHandler, serieSource); try { tr.transform(source, new StreamResult(dest)); } catch (TransformerException e) { // TODO Auto-generated catch block System.out.println(e.getLocator()); e.printStackTrace(); } } }mais à chaque fois que j'exécute, j'ai une exception:
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 public class TestWriter { private VnrReader lecteurXML; private ArrayList<Series> listeEntree; private File fichier_ko; private VnrWriter ecrivain; public TestWriter(){ try { lecteurXML = new VnrReader(new FileInputStream("vnrfile.xml")); fichier_ko = new File("fich_ko"); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } listeEntree = lecteurXML.getVnr(); DateFormat sdt = new SimpleDateFormat("hh:mm"); //DateFormat date = DateFormat.getDateInstance(); System.out.println(listeEntree); ecrivain = new VnrWriter(); } public void go(){ ecrivain.xlmWriter(new SeriesSource(listeEntree), fichier_ko); } public static void main(String[] args){ TestWriter tw = new TestWriter(); tw.go(); } }
Quelqu'un saurait-il me dire ce qui ne va pas dans 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 ERREUR : '' null javax.xml.transform.TransformerException: java.lang.NullPointerException at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) at traitement.VnrWriter.xlmWriter(VnrWriter.java:37) at traitement.TestWriter.go(TestWriter.java:36) at traitement.TestWriter.main(TestWriter.java:41) Caused by: java.lang.NullPointerException at com.sun.org.apache.xml.internal.serializer.ToStream.writeAttrString(Unknown Source) at com.sun.org.apache.xml.internal.serializer.ToStream.processAttributes(Unknown Source) at com.sun.org.apache.xml.internal.serializer.ToStream.closeStartTag(Unknown Source) at com.sun.org.apache.xml.internal.serializer.ToStream.startElement(Unknown Source) at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.startElement(Unknown Source) at traitement.VnrWriterHandler.parse(VnrWriterHandler.java:89) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(Unknown Source) ... 5 more --------- java.lang.NullPointerException at com.sun.org.apache.xml.internal.serializer.ToStream.writeAttrString(Unknown Source) at com.sun.org.apache.xml.internal.serializer.ToStream.processAttributes(Unknown Source) at com.sun.org.apache.xml.internal.serializer.ToStream.closeStartTag(Unknown Source) at com.sun.org.apache.xml.internal.serializer.ToStream.startElement(Unknown Source) at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.startElement(Unknown Source) at traitement.VnrWriterHandler.parse(VnrWriterHandler.java:89) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(Unknown Source) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) at traitement.VnrWriter.xlmWriter(VnrWriter.java:37) at traitement.TestWriter.go(TestWriter.java:36) at traitement.TestWriter.main(TestWriter.java:41)
Merci d'avance pour vos suggestions
Partager