Rechercher Remplacer efficace, et question StringBuffer
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:
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:
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:
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:
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 !