Bonjour,

je rencontre un probleme lorsque je parse un fichier xml, chaque nouveau xml genere comporte des espaces devant <? m'empechant de lire le fichier pour recuperer des contenus dans une balise; je ne peux pas utiliser trim() car certaine espace sont necessaire:


je vous represente les espaces en rouges pour vous indiquez ou ils se trouvent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10

espace
espace      
espace <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<FinancialConcepts xmlns="" xmlns:xsi="http://www.XXX.XXX/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FinancialConcept.xsd">

  <FinancialConcept father="PeriodSchedule" fatherVersion="1" isReadOnly="false" name="AdjScheduleCSW_A" type="Schedule" version="2">
    <Script/>
    <AnalysisConfig version="2">
mon code actuel est :

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
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("< ", "&lt;");
					recup = recup.replaceAll(" \\<= ", " &lt;= ");
					recup = recup.replaceAll("<=", " &lt;= ");
					recup = recup.replaceAll("& ", "&amp; ");
					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();
			}
		}
    }

}
en rouge ce que j'ai tente de faire mais qui ne marche pas.

Avez vous une solution svp?