IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT]Traiter un ensemble de fichiers en boucle avec XSLT


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 43
    Par défaut [XSLT]Traiter un ensemble de fichiers en boucle avec XSLT
    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

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 43
    Par défaut
    est -il possible de faire :
    s'il rencontre un problème quelconque, il passe au prochain noeud <subscription>?

  3. #3
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    juste un bout de code pour placer dans un xml, un ensemble de fichier xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE students[
    <!ENTITY source1 SYSTEM "student1.xml">
    <!ENTITY source2 SYSTEM "student2.xml">
    <!ENTITY source3 SYSTEM "student3.xml">
    ]>
     
    <students>
    &source1;
    &source3;
    &source2;
    </students>

Discussions similaires

  1. Traiter un ensemble de fichier dans un repertoire
    Par slayer23 dans le forum MATLAB
    Réponses: 5
    Dernier message: 06/07/2007, 01h11
  2. Traiter un ensemble de fichiers en boucle
    Par JohnnyWalk dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 13/03/2007, 08h38
  3. XSLT traiter recursivement un fichier xml
    Par davelo dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/02/2006, 10h52
  4. Awk - Traiter chaque ligne du fichier passwd
    Par tony montana dans le forum Linux
    Réponses: 7
    Dernier message: 25/03/2004, 09h40
  5. Compresser et decompresser un ensemble de fichier
    Par Walm dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/01/2004, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo