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)
Et dans mon XLF:
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>
Je voudrais remplacer tous mes tag documentation par le texte lui-même et me débarrasser des références.
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>
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 :
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
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(); }
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.
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); } } }
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 !
Partager