Bonjour,

J'ai découpé un gros fichier XML en plusieurs petits.
Je recrée le gros fichier avec cette méthode :

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
	/**
         * Fusionne tous les fichiers xml présent dans le répertoire shemasNavigation dans le fichier schemaNavigationGenere.xml.
         * Les fichiers xml à fusionnés doivent être de la forme CO*.xml
         * @throws IOException
         * @throws ValeurNullException
         */
	public static void creerSchemaNavigation() throws IOException, ValeurNullException {
 
		File repShemasCarto = new File(Constante.getProjectHome()+"/xml/"+Constante.URL_REPERTOIRE_XML_CARTOGRAPHIE);
		File [] lesSchemasNavigation = repShemasCarto.listFiles ();
 
		if (lesSchemasNavigation != null){
 
			PrintWriter printWriter = null;
			FileInputStream fileInputStream = null;
			BufferedReader buffer = null;
			try{
				// On supprime le fichier XML qui sera la fusion de tous les fichiers si il existe
				File f  = new File(Constante.getProjectHome()+"/xml/"+Constante.NOM_FICHIER_XML_SCHEMA_NAVIGATION_GENEREE);
				if( f.exists() ) {
					f.delete();
				}
 
				// On ouvre l'ouvre en écriture
				File fichierDest = new File(Constante.getProjectHome()+"/xml/"+Constante.NOM_FICHIER_XML_SCHEMA_NAVIGATION_GENEREE);
				printWriter = new PrintWriter(fichierDest.getAbsolutePath(), "UTF-8"); 
 
				// On ajoute la balise de début
				printWriter.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
				printWriter.println("<!DOCTYPE schemaNavigation SYSTEM \"./schemaNavigation.dtd\" >");
				printWriter.println();
				printWriter.println("<!-- Fichier XML auto-généré -->");
				printWriter.println("<!-- Ne pas modifier directement : modifier les fichier CO*.xml du répertoire " + Constante.URL_REPERTOIRE_XML_CARTOGRAPHIE + " et regénérer le fichier " + Constante.NOM_FICHIER_XML_SCHEMA_NAVIGATION_GENEREE + " -->");
				printWriter.println();
				printWriter.println();
				printWriter.println("<schemaNavigation>");
 
				for (File unSchemaNavigation:lesSchemasNavigation) {
					if (unSchemaNavigation.isFile() && unSchemaNavigation.getName().startsWith("CO") && unSchemaNavigation.getName().endsWith(".xml")) {
						Debug.print(" |-> Copie de " + unSchemaNavigation.getName(), nomClasse);
						fileInputStream = new FileInputStream(unSchemaNavigation.getAbsolutePath());
						buffer = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8"));
 
						try {
							String ligne;
							while ((ligne = buffer.readLine()) != null) {
								printWriter.println(ligne);
							}
						}
						finally {
							buffer.close();
							fileInputStream.close();
						}
					} else {
						Debug.print(unSchemaNavigation.getName() + " a été ignoré.", nomClasse);
					}
				}
 
				// On ajoute la balise de fin
				printWriter.println("</schemaNavigation>");
 
				Debug.print(String.valueOf(lesSchemasNavigation.length) + " fichiers ont été copié dans " + Constante.NOM_FICHIER_XML_SCHEMA_NAVIGATION_GENEREE + ".", nomClasse);
 
			}catch(IOException ex){
				ex.printStackTrace();
			}finally{
				if(printWriter != null){
					printWriter.flush();
					printWriter.close();
				}
			}			
        } else {
        	throw new ValeurNullException("Erreur de lecture du fichier : " + repShemasCarto);
        }
	}
Le problème est qu'une exception est levée lorsque j'appelle ce morceau de code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
// Création d'une fabrique de documents
	    DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
 
	    // Création d'un constructeur de documents
	    DocumentBuilder constructeur = fabrique.newDocumentBuilder();
 
	    // Lecture du contenu d'un fichier XML avec DOM
	    File xml = new File(Constante.getProjectHome()+"/xml/"+Constante.NOM_FICHIER_XML_SCHEMA_NAVIGATION_GENEREE);
	    UtilitaireXMLtoModeleCartographie.doc = constructeur.parse(xml);
L'exception en question est : org.xml.sax.SAXParseException: Missing whitespace after element name declaration.

Par contre si j'ouvre le fichier avec un éditeur de texte et que je l'enregistre, le parsing passe sans problème.

Je pense à un problème d'encodage. J'ai tenté de changer l'UTF-8 par du ISO-8859-1 mais sans résultat.

Avez-vous une idée ?

Merci d'avance.