Salut à tous,

J'ai 2 fichiers, un xml et un xlf. Mon XML content un tag "documentation" qui contient une référence.
Cette référence correspond à la documentation elle-même contenue dans le XLF.

Exemple: (XML)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 <object name="Logger">
        <documentation>
			Logger_desc
        </documentation>
 
       <property name="debugEnabled" type="Boolean">
          <documentation>
          	TWLogger_prop_debugEnabled
          </documentation>
      </property>
</object>
Et dans mon XLF:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 <trans-unit id="Logger_desc">
                <source>Helper class allowing to log errors, warning and debugs to the 'javascript.log'. This class is available as 'log' variable in all javascript fields in BPM.</source>
            </trans-unit>
Je voudrais remplacer tous mes tag documentation par le texte lui-même et me débarrasser des références.

Pas trop méchant donc.

J'ai réussi à réécrire un fichier un peu brisé qui a bien la documentation et plus les références. Mais c'est lent et je réécris régulièrement le début du fichier a cause de mon filereader et mon filewriter que je n'arrive pas à synchroniser.

J'ai tenté d'utiliser un StringBuffer pour voir si c'était aps plus simple, mais j'ai du mal à piger comment remplacer toutes mes occurrences dedans.

Un peu de code :

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
	public static void main(String[] args) throws XPathExpressionException, ParserConfigurationException, SAXException, IOException {
		prepareFiles();//ici je parse mes fichiers, ouvre mes reader etc.
		NodeList references = getDocumentationReferences(ParsedGlobalXml);//je récupère tous mes tag documentations dans mon xml
 
		//replace each reference by its actual value
		for (int i = 0; i < references.getLength(); i++) {
			String reference = references.item(i).getNodeValue().trim();
			String value = getValue(reference);//je prends la valeur qui correpond à la référence dans le XLF
			if (value != "Description N/A") {
				content.toString().replaceAll(reference, value);
//comment je fais pour gérer un replaceAll dans une boucle sur un StringBuffer?
			}
		}
		Writer.print(content);
		Writer.close();
	}
Mon ancienne méthode pour écrire mes remplacements dans le fichiers de sortie, ca détruit mon XML de base.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private static void replaceReferenceByValue(String reference, String value) throws IOException {
		Reader = new BufferedReader(new FileReader(Result));
		String line = null;
		boolean found = false;
		while (((line = Reader.readLine()) != null) && !found) {
			if (line.contains(reference)) {
				Writer.println(line.replace(reference, value));
				found = true;
			} else {
				Writer.println(line);
			}
		}
 
	}
J'ai besoin d'un coup de patte dans mon main pour voir si c'est pas mieux avec un StringBuffer et surtout plus rapide.

Pour ordre d'idée, j'ai 2850 lignes dans mon XML et presque autant dans mon XLF et 556 références à remplacer par leur valeur.

Récupérer les valeurs dans le XLF est très rapide avec XPath. Mon problème reste pour le remplacement lui-même

Merci !