3 pièce(s) jointe(s)
Fusion de plusieurs fichiers XML en un seul
Bonjour
Je suis débutant en java (j'utilise NetBeans) et je souhaiterais lister tous les fichiers XML d'un dossier défini en amont grâce à un JFileChooser car je souhaiterais récupérer tout le contenu du nœud <PmtInf> de chaque fichier xml pour le copier à la suite du 1er fichier trouvé.
J'ai commencé avec deux fichiers XML défini en statique (voir pièce jointe exemple1.xml et exemple2.xml) mais lorsque je souhaite récupérer tout le contenu du nœud <PmtInf> de mon deuxième fichier pour l'afficher à la suite du nœud <PmtInf> de mon 1er fichier cela ferme mon nœud </pain.001.001.02> avant de le mettre (pièce jointe final.xml) et je ne comprends pas pourquoi.
Voici la partie code en java :
Code:
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 50 51 52 53 54 55 56 57
|
package javaapplication3;
import java.io.File;
import java.io.FileInputStream;
import java.io.StringWriter;
import java.io.Writer;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class JavaApplication3 {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc1 = db.parse(new FileInputStream(new File("exemple1.xml")));
Document doc2 = db.parse(new FileInputStream(new File("exemple2.xml")));
System.out.println("Avant Copie...");
prettyPrint(doc2);
NodeList list = doc1.getElementsByTagName("PmtInf");
Element element = (Element) list.item(0);
Node copiedNode = doc2.importNode(element,true);
doc2.getDocumentElement().appendChild(copiedNode);
System.out.println("Après Copie...");
prettyPrint(doc2);
}
public static final void prettyPrint(Document xml) throws Exception {
Transformer tf = TransformerFactory.newInstance().newTransformer();
tf.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
tf.setOutputProperty(OutputKeys.INDENT, "yes");
Writer out = new StringWriter();
tf.transform(new DOMSource(xml), new StreamResult(out));
System.out.println(out.toString());
}
} |
J'aurais peut être également besoin de votre aide plus tard pour gérer la partie pour récupérer tous les fichiers XML depuis un dossier défini et pour les faire afficher dans un composant Jlist ou autre avec sélection grâce à des cases à cocher mais pour le moment je souhaite régler ce premier souci.
Merci par avance à tout ceux qui prendront du temps à regarder et qui pourront m'apporter une solution et m'aider à avancer.