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 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 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
|
import java.text.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import org.xml.sax.Attributes;
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 String _tag1;
private String _tag2;
private String _tag3;
private String _tag4;
private Boolean _hasFound; //balise _tag détectée
private int _comFound; // balise _comFound trouvee
private int _contFound; // balise _comFound trouvee
private int _scriptFound; // balise _scriptFound trouvee
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 tag1,String tag2,String tag3,String fileName)
{
super();
_tag=tag;
_tag1 =tag1;
_tag2 =tag2;
_tag3 =tag3;
_fileName=fileName;
_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,String tag1,String tag2,String tag3)
{
super();
_tag=tag;
_tag1 =tag1;
_tag1 =tag2;
_tag3 =tag3;
_fileName=_tag;
_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))|| (qName.equals(_tag1)) || (qName.equals(_tag2))|| ((qName.equals(_tag3))&& (atts.getValue("type").equals("Deal"))))
{
if (((qName.equals(_tag3))&& (atts.getValue("type").equals("Deal")))){_tag4=atts.getValue("name");}
//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("0000");
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();
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
{
recup = buf.toString();
recup = recup.replace("<>", "!=");
recup = recup.replace("<=", " <= ");
recup = recup.replaceAll("<> \"Fixed\"", "!= \"Fixed\"");
recup = recup.replaceAll("root ", "root name=\""+_tag4+ "\" ");
recup = recup.replaceAll("dealName=\"EQSIDXKIKO_OR_A\"", "name=\""+_tag4+ "\" "+ "dealName=\"EQSIDXKIKO_OR_A\"");
recup = recup.replaceAll("@!", "");
recup = recup.replaceAll("\\[CDATA\\[", "");
recup = recup.replaceAll("]]", "");
recup = recup.replaceAll("@", "");
recup = recup.replaceAll("<>", "!=");
recup = recup.replaceAll("< ", "<");
recup = recup.replaceAll("(FX - STRIKE)\right", "(FX - STRIKE)/right");
recup = recup.replaceAll("UTF - 8", "UTF-8");
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");
if (recup.contains("<Comment>")){
_comFound = 1;}
else if (recup.contains("</Comment>")){
_comFound = 0;}
if (recup.contains("<Script>")){
_scriptFound = 1;}
else if (recup.contains("</Script>")){
_scriptFound = 0;}
if (_comFound == 1){
recup = recup.replaceAll("&", "&");
recup = recup.replaceAll("Else", " Else");
recup = recup.replaceAll("The", " The");
recup = recup.replaceAll("If", " If");
recup = recup.replaceAll("if", " if");
recup = recup.replaceAll("StrikeInt", " StrikeInt");
recup = recup.replaceAll("SpotInt", " SpotInt");
recup = recup.replaceAll("CorporateAmountCcy1", " CorporateAmountCcy1");
recup = recup.replaceAll("NotionalInt", " NotionalInt");
recup = recup.replaceAll("END", " END");
recup = recup.replaceAll("Default", " Default");
recup = recup.replaceAll("NotionalAmountCcy1", " NotionalAmountCcy1");
recup = recup.replaceAll("<>", "!=");
recup = recup.replaceAll("< ", "<");
recup = recup.replaceAll("- ", " - ");
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");
}
if (_scriptFound ==1){
recup = recup.replaceAll("<>", "!=");
recup = recup.replaceAll("<=", " <= ");
recup = recup.replaceAll(" \\<= ", " <= ");
recup = recup.replaceAll("< ", "<");
}
recup = recup.replaceAll("is Default", "isDefault");
recup = recup.replaceAll("UTF - 8", "UTF-8");
recup = recup.replaceAll("http://www.w3.org/2001/XMLSchema - instance", "http://www.w3.org/2001/XMLSchema-instance");
if(!recup.trim().equals(""))
{
_tampon.write(recup.toString());
}
}
catch (IOException exception) {
exception.printStackTrace();
}
}
} |
Partager