KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > zirc > xml > XmlPars


1 package zirc.xml ;
2
3 //import utile au parsage xml
4
import java.util.* ;
5 import org.xml.sax.* ;
6
7 //zIrc, irc client.
8
// Copyright (C) 2004 CoolBytes(Stephane claret, Andre Aymon, Alban Zumofen) coolbytes@hotmail.com
9
//
10
// This program is free software; you can redistribute it and/or
11
// modify it under the terms of the GNU General Public License
12
// as published by the Free Software Foundation; either version 2
13
// of the License, or (at your option) any later version.
14
//
15
// This program is distributed in the hope that it will be useful,
16
// but WITHOUT ANY WARRANTY; without even the implied warranty of
17
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
// GNU General Public License for more details.
19

20 /**
21  * <p>Title:XmlPars deprecie... </p>
22  * <p>Description: </p>
23  * <p>Copyright: Copyright (c) 2004</p>
24  * <p>Company: CoolBytes(Stephane claret, Andre Aymon, Alban Zumofen) coolbytes@hotmail.com</p>
25  * @version 1.0
26  */

27
28
29 //Description : le parseur xml resoit un tableau de cl�f et retourne une
30
// une arrayListe de valeur
31
//le parseur : C'est un mod�le de lecture pour un type de fichier xml
32
//sax : J'utilise sax, c'est l'api qui permet de lire du xml par �v�nements
33
// C'est le d�but du docuemnt alors je fait cela, etc
34
//rem : pour de plus emplerenseignement voir en fin de class, texte + lien
35

36 public class XmlPars extends HandlerBase
37 {
38   private String JavaDoc tag = "" ;
39   private ArrayList aList = new ArrayList() ;
40   private String JavaDoc[] ligne ;
41   private String JavaDoc[] clefs ;
42
43   //n'est pas utilis�
44
public XmlPars()
45   {
46   }
47
48   //constructeur par param�tre (tableau de cl�f)
49
public XmlPars(String JavaDoc[] _clefs)
50   {
51     //fait une copie de _clefs (c'est certainement un prob de pointeur)
52
clefs = new String JavaDoc[_clefs.length] ;
53     for (int i = 0 ; i < _clefs.length ; i++)
54     {
55       clefs[i] = new String JavaDoc(_clefs[i]) ;
56     }
57     ligne = new String JavaDoc[_clefs.length] ;
58   }
59
60   //lis les tags
61
public void startElement(String JavaDoc name, org.xml.sax.AttributeList JavaDoc atts)
62   {
63     tag = name ;
64   }
65
66   //inserrer la ligne dans l'arrayList
67
public void endElement(String JavaDoc name)
68   {
69
70     //si c'est la derni�re clefs alors enregistrer la ligne
71
if (name.equals(clefs[clefs.length - 1]))
72     {
73       //faire une copie de ligne[] (je pense qu'il y a un prob de pointeur)
74
String JavaDoc[] newLigne = new String JavaDoc[ligne.length] ;
75       for (int i = 0 ; i < newLigne.length ; i++)
76       {
77         newLigne[i] = ligne[i] ;
78       }
79       //ajouter la ligne copi�e
80
aList.add(newLigne) ;
81     }
82     tag = "" ;
83   }
84
85   //Actions � r�aliser sur les donn�es
86
public void characters(char[] caracteres, int debut, int longueur)
87   {
88     if (!tag.equals(""))
89     {
90       String JavaDoc donnees = new String JavaDoc(caracteres, debut, longueur) ;
91       //System.out.println(" "+tag+" = *" + donnees + "*") ;
92

93       //mettre les donn�es dans la ligne au bon endroit
94
for (int i = 0 ; i < clefs.length ; i++)
95       {
96         if (tag.equals(clefs[i]))
97         {
98           ligne[i] = new String JavaDoc(donnees) ;
99         }
100       }
101     }
102   }
103
104   public ArrayList getAList()
105   {
106     return aList ;
107   }
108   public void aListClear()
109   {
110   aList.clear();
111   }
112   //methode pas utilis�es
113
public void startDocument()
114   {
115   }
116
117   public void endDocument()
118   {
119   }
120
121 }
122 /** http://perso.wanadoo.fr/jm.doudoux/java/tutorial/chap031.htm
123  *Conseil de traitement XML
124  *
125  La classe handler doit red�finir certaines de ces m�thodes selon les besoins des traitements.
126  En r�gle g�n�rale :
127  * il faut sauvegarder dans une variable le tag courant dans la m�thode startElement()
128  * traiter les donn�es en fonction du tag courant dans la m�thode characters()
129  La sauvegarde du tag courant est obligatoire car la m�thode characters() ne contient pas dans ces param�tres le nom du tag correspondant aux donn�es.
130  Si les donn�es contenues dans le document XML contiennent plusieurs occurrences qu'il faut g�rer avec une collection qui contiendra des objets encapsulant les donn�es, il faut :
131  * g�rer la cr�ation d'un objet dans la m�thode startElement() lors de la rencontre du tag de d�but d'un nouvel �l�ment de la liste
132  * alimenter les attributs de l'objet avec les donn�es de chaque tags utiles dans la m�thode characters()
133  * g�rer l'ajout de l'objet � la collection dans la m�thode endElement() lors de la rencontre du tag de fin d'�l�ment de la liste
134  La m�thode characters() est appel�e lors de la d�tection de donn�es entre un tag de d�but et un tag de fin mais aussi entre un tag de fin et le tag d�but suivant lorsqu'il y a des caract�res entre les deux. Ces caract�res ne sont pas des donn�es mais des espaces, des tabulations, des retour chariots et certains caract�res non visibles.
135  Pour �viter de traiter les donn�es de ces �v�nements, il y a plusieurs solutions :
136  * supprimer tous les caract�res entre les tags : tous les tags et les donn�es sont rassembl�s sur une seule et unique ligne. L'inconv�nient de cette m�thode est que le message est difficilement lisible par un �tre humain.
137  * une autre m�thode consiste � remettre � vide la donn�e qui contient le tag courant (aliment�e dans la m�thode startElement()) dans la m�thode endElement(). Il suffit alors d'effectuer les traitements dans la m�thode characters() uniquement si le tag courant est diff�rent de vide
138  */

139
Free Books   Free Magazines  
Popular Tags