Bonjour,
J'utilise xslt pour tranformer un xml plat vers un xml structuré. Le xml plat je l'obtiens suite à un parsing d'un ensemble de fichiers textes contenus dans différents répertoires.
Le problème c'est que si un fichier plante tout le traitement de mon appli plante. Donc je voudrais savoir si je peux faire tourner un xslt sur chacun des fichier en boucle comme:
for (File subfolder : directories) {
et comment concaténer par la suite les différents xml généré par le xslt ?
voici mon main :
Code java : 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 public class Process { public static void main(String[] args) { new Process(args[0]); } /** * @param folderName * The folder path and name. */ public Process(String folderName) { if (!folderName.isEmpty()) { try { // TODO Debug System.out.println("Processus of: " + folderName); // input file (flat xml) // cette classe met tt dans un seul fichier plat Xmlprocess sub = new Xmlprocess(folderName); StringBuffer flatXml = sub.serialize(); ByteArrayInputStream xml = new ByteArrayInputStream(flatXml.toString().getBytes()); // XSL template InputStream xslt = getClass().getResourceAsStream("/xslt/transform.xslt"); // output file FileOutputStream output = new FileOutputStream(folderName+ "\\out.xml" ); // XsltParser.parse(xml, xslt, output); output.close(); xslt.close(); xml.close(); // TODO Debug System.out.println("Ouput XML file successfully written to: "+ folderName + "\\schema.xml"); s_logger.debug("Ouput XML file successfully written to: "+ folderName + "\\schema.xml"); } catch (IOException e) { s_logger.error("This path doesn't exist or is invalid or is empty (check if it's a directory): " + folderName); } } else { // TODO s_logger.error("This path doesn't exist or is invalid or is empty (check if it's a directory): " + folderName); // /e.printStackTrace(); } } }
et voici ma classe Xmlprocess qui génère le xml plat
Code java : 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 public class Xmlprocess implements XmlSerializer { /** * The subscriptions root folder path. */ private String folderName; public Xmlprocess(String folderName) { this.folderName = folderName; } public StringBuffer serialize() throws XmlException { StringBuffer xml = new StringBuffer(); File directory = new File(folderName); if (directory.exists() && directory.isDirectory()) { File[] list = directory.listFiles(); if (list != null) { xml.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); // read all the folder content and process each parts xml.append("<subscriptions>\n"); // find the subscriptions (subfolders)... File[] directories = directory.listFiles(new FileFilter() { public boolean accept(File f) { return f.isDirectory(); } }); // ... and process them int numeroOrdre = 1; for (File subfolder : directories) { XmlParse xmls = new XmlParse(subfolder.getAbsolutePath(), numeroOrdre); xml.append(xmls.serialize()); numeroOrdre++; } } else { s_logger.debug("This path doesn't exist or is invalid or is empty (check if it's a directory): "+ folderName); } } else { s_logger.debug("This path doesn't exist or is invalid or is empty (check if it's a directory): "+ folderName); } xml.append("</subscriptions>"); return xml; } }
Merci infiniment
Partager