web-dev-qa-db-fra.com

Comment créer un fichier XML avec une structure spécifique dans Java

Je voudrais créer le fichier XML en utilisant Java.

Ma structure de fichier XML:

<?xml version="1.0" encoding="UTF-8"?>
<CONFIGURATION>
    <BROWSER>chrome</BROWSER>
    <BASE>http:fut</BASE>
    <ENVIRONMENT>abcd</ENVIRONMENT>
    <USER>john</USER>
    <PASSWORD>abcd123</PASSWORD>
    <ORGANIZATION>Tim</ORGANIZATION>
    <EMPLOYEE>
        <EMP_NAME>Anhorn, Irene</EMP_NAME>
        <ACT_DATE>20131201</ACT_DATE>
        <DATE_IN>20131201</DATE_IN>
        <CLOCK_IN>0800</CLOCK_IN>
        <DATE_OUT>20131201</DATE_OUT>
        <CLOCK_OUT>1600</CLOCK_OUT> 
    </EMPLOYEE>
    <EMPLOYEE>
        <EMP_NAME>Arlegui, Karen Jay</EMP_NAME>
        <ACT_DATE>20131201</ACT_DATE>
        <DATE_IN>20131201</DATE_IN>
        <CLOCK_IN>1600</CLOCK_IN>
        <DATE_OUT>20131202</DATE_OUT>
        <CLOCK_OUT>0000</CLOCK_OUT> 
    </EMPLOYEE>
</CONFIGURATION>
24
user3438838

Vous pouvez utiliser la bibliothèque JDOM en Java. Définissez vos balises comme des objets Element , documentez vos éléments avec Classe de document et créez votre fichier xml avec SAXBuilder . Essayez cet exemple:

//Root Element
Element root=new Element("CONFIGURATION");
Document doc=new Document();
//Element 1
Element child1=new Element("BROWSER");
//Element 1 Content
child1.addContent("chrome");
//Element 2
Element child2=new Element("BASE");
//Element 2 Content
child2.addContent("http:fut");
//Element 3
Element child3=new Element("EMPLOYEE");
//Element 3 --> In this case this element has another element with Content
child3.addContent(new Element("EMP_NAME").addContent("Anhorn, Irene"));

//Add it in the root Element
root.addContent(child1);
root.addContent(child2);
root.addContent(child3);
//Define root element like root
doc.setRootElement(root);
//Create the XML
XMLOutputter outter=new XMLOutputter();
outter.setFormat(Format.getPrettyFormat());
outter.output(doc, new FileWriter(new File("myxml.xml")));
15
Ahmad Vatani
public static void main(String[] args) {

try {

    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document doc = docBuilder.newDocument();
    Element rootElement = doc.createElement("CONFIGURATION");
    doc.appendChild(rootElement);
    Element browser = doc.createElement("BROWSER");
    browser.appendChild(doc.createTextNode("chrome"));
    rootElement.appendChild(browser);
    Element base = doc.createElement("BASE");
    base.appendChild(doc.createTextNode("http:fut"));
    rootElement.appendChild(base);
    Element employee = doc.createElement("EMPLOYEE");
    rootElement.appendChild(employee);
    Element empName = doc.createElement("EMP_NAME");
    empName.appendChild(doc.createTextNode("Anhorn, Irene"));
    employee.appendChild(empName);
    Element actDate = doc.createElement("ACT_DATE");
    actDate.appendChild(doc.createTextNode("20131201"));
    employee.appendChild(actDate);
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);
    StreamResult result = new StreamResult(new File("/Users/myXml/ScoreDetail.xml"));
    transformer.transform(source, result);
    System.out.println("File saved!");
  } catch (ParserConfigurationException pce) {
    pce.printStackTrace();
  } catch (TransformerException tfe) {
    tfe.printStackTrace();}}

Les valeurs dans votre XML sont codées en dur.

19
Tamil veera Cholan

Utilisez JAXB: http://www.mkyong.com/Java/jaxb-hello-world-example/

package com.mkyong.core;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Customer {

    String name;
    int age;
    int id;

    public String getName() {
        return name;
    }

    @XmlElement
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    @XmlElement
    public void setAge(int age) {
        this.age = age;
    }

    public int getId() {
        return id;
    }

    @XmlAttribute
    public void setId(int id) {
        this.id = id;
    }

}
package com.mkyong.core;

import Java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class JAXBExample {
    public static void main(String[] args) {

      Customer customer = new Customer();
      customer.setId(100);
      customer.setName("mkyong");
      customer.setAge(29);

      try {

        File file = new File("C:\\file.xml");
        JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        // output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        jaxbMarshaller.marshal(customer, file);
        jaxbMarshaller.marshal(customer, System.out);

      } catch (JAXBException e) {
        e.printStackTrace();
      }

    }
}
16
Ran Adler

Aucune bibliothèque externe n'est nécessaire, les bibliothèques système JRE fournissent tout ce dont vous avez besoin.

J'en déduis que vous avez un org.w3c.dom.Document objet que vous souhaitez écrire dans un fichier

Pour ce faire, vous utilisez un javax.xml.transform.Transformer:

import org.w3c.dom.Document
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 

public class XMLWriter {
    public static void writeDocumentToFile(Document document, File file) {

        // Make a transformer factory to create the Transformer
        TransformerFactory tFactory = TransformerFactory.newInstance();

        // Make the Transformer
        Transformer transformer = tFactory.newTransformer();

        // Mark the document as a DOM (XML) source
        DOMSource source = new DOMSource(document);

        // Say where we want the XML to go
        StreamResult result = new StreamResult(file);

        // Write the XML to file
        transformer.transform(source, result);
    }
}

Source: http://docs.Oracle.com/javaee/1.4/tutorial/doc/JAXPXSLT4.html

10
DirkyJerky