| 12
 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
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 
 | 
import java.text.*;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.xml.sax.XMLReader;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.helpers.XMLReaderFactory;
import org.xml.sax.helpers.DefaultHandler;
public class MySAXApp extends DefaultHandler
{
/*
 * Comment saxer un xml de façon qu'il soit créé des fichiers xml dont le contenu
 * concerne des arbres xml situés dans le TEXT d'une balise
 * 
 * le souligné devant un nom de variable est un moyen mnémo qui
 * indique que la variable est un attribut d'objet de la classe
 */
	
	private String _tag; // balise recherchée, respecter la casse
	private Boolean _hasFound; //balise _tag détectée
	private Boolean hasFound ; //balise <? détectée
	private FileWriter _myFile;
	private BufferedWriter _tampon;
	private String _fileName;
	public int _cpt=0;
	private static String recup;
	
    public MySAXApp ()
    {
	super();
    }
/*
 * constructeur explicite, je fournis la balise (tag in english) Concept et le nom de fichier
 * standard de récupération des arbres xml situés dans le TEXT de la balise Concept
 */
    
    public MySAXApp (String tag,String fileName)
    {
	super();
		_tag=tag;
		_fileName=fileName;
		_hasFound=false;
		hasFound=false;
		_myFile=null;
		_tampon=null;
    }
   /*
    * idem mais le nom du fichier std de récup est le nom de la balise elle-même 
    */
    public MySAXApp (String tag)
    {
	super();
		_tag=tag;
		_fileName=_tag;
		_hasFound=false;
		hasFound=false;
		_myFile=null;
		_tampon=null;		
    }
    ////////////////////////////////////////////////////////////////////
    // Event handlers.
    ////////////////////////////////////////////////////////////////////
    public void startDocument ()
    {
//	System.out.println("Start document");
    }
    public void endDocument ()
    {
//	System.out.println("End document");
    }
//élément de détection de balise
    public void startElement (String uri, String name,
			      String qName, Attributes atts)
    {
//	if ("".equals (uri))
//	    System.out.println("Start element: " + qName);
//	else
//	    System.out.println("Start element: {" + uri + "}" + name);
	
    	
    	//est-ce la balise _tag "Concept" à trouver ?
		if(qName.equals(_tag)) 
		{
			//si oui je créé un fichier xml numéroté
			_myFile = null; //FileWriter
			_tampon = null; //BufferedWriter
			_cpt++; //compteur commence à 1
			//je prépare un gabarit numérique pour trois chiffres par nombre
			DecimalFormat df = new DecimalFormat("000");
			try {
				//contruction du nom du fichier de récup 
				StringBuffer ch=new StringBuffer(this._fileName);
				//ajout du numéro de fichier si plusieurs balises du même type
				//il s'agit de ne pas écraser les fichiers existants
				ch.append(df.format(_cpt)).append(".xml");
				//création du fichier
				  _myFile = new FileWriter(ch.toString());
				  //création du buffer en RAM du fichier
				  _tampon = new BufferedWriter(_myFile);
				  
			} catch (IOException exception) {
				  exception.printStackTrace();
				}
			_hasFound=true;
		}
    }
    public void endElement (String uri, String name, String qName)
    {
//	if ("".equals (uri))
//	    System.out.println("End element: " + qName);
//	else
//	    System.out.println("End element:   {" + uri + "}" + name);
    	
    	//le _tag a été trouvé, le fichier créé
		if(_hasFound==true)
		{//maintenant faut le fermer proprement
			_hasFound=false;
			//flush (de la Ram vers le fichier)
			try {
			  if(_tampon!=null){
			    _tampon.flush();
			    _tampon.close();
			    _myFile.close();
			  }
					  
			  } catch (IOException e1) {
				  e1.printStackTrace();
			}		
		}		
    }
    public void characters (char ch[], int start, int length)
    {
	/*
	 * je récup la chaine TEXT d'une balise <ELEMENT attribut1=".." .. > TEXT </ELEMENT>
	 */
		if(_hasFound==true)
		{ //j'enregistre dans un fichier le TEXT de l'ELEMENT Concept
			StringBuffer buf=new StringBuffer();
//		System.out.print("Characters:    \"");
			for (int i = start; i < start + length; i++) {
				buf.append(ch[i]);
			}
			//si plus d'une balise Concept ou rien si un seul traitement désiré
			try
			{
				// System.out.println(buf.toString());
					recup = buf.toString();
					recup = recup.replaceAll("<>", "!=");
					recup = recup.replaceAll("< ", "<");
					recup = recup.replaceAll(" \\<= ", " <= ");
					recup = recup.replaceAll("<=", " <= ");
					recup = recup.replaceAll("& ", "& ");
					recup = recup.replaceAll("\"t", "\"  t");
					recup = recup.replaceAll("\"v", "\"  v");
					recup = recup.replaceAll("Facettype", "Facet type");
	
				//tant que le string recup ne contient pas <? hasFound = False
				if (recup.toString().contains("<?"))
				{hasFound=true;}
				
				while (hasFound==true){
				_tampon.write(recup.toString());
				//_tampon.close();
				}
			
                          }
			catch (IOException exception) {
				  exception.printStackTrace();
			}
		}
    }
} | 
Partager