Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create XML file with specific structure in Java [duplicate]

I would like to create XML file using Java.

My XML file structure:

<?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>
like image 762
user3438838 Avatar asked May 07 '14 14:05

user3438838


People also ask

How do you write data to XML file in Java?

Write XML to a file Steps to create and write XML to a file. Create a Document doc . Create XML elements, attributes, etc., and append to the Document doc . Create a Transformer to write the Document doc to an OutputStream .

Can we create an XML Document using DOM parser?

The DOM provides many handy classes to create an XML file easily. Firstly, you have to create a Document with DocumentBuilder class, define all the XML content – node, attribute with Element class. In last, use the Transformer class to output the entire XML content to stream output, typically a File.

How do you add an attribute to an existing XML file in Java?

in DOM parser it is very easy. get your node and simply use this function. ((Element)node). setAttribute("attr_name","attr_value");


4 Answers

You can use the JDOM library in Java. Define your tags as Element objects, document your elements with Document Class, and build your xml file with SAXBuilder. Try this example:

//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"))); 
like image 106
Ahmad Vatani Avatar answered Oct 14 '22 17:10

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();}} 

The values in you XML is Hard coded.

like image 31
Tamil veera Cholan Avatar answered Oct 14 '22 16:10

Tamil veera Cholan


Use 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();
      }

    }
}
like image 44
Ran Adler Avatar answered Oct 14 '22 17:10

Ran Adler


There is no need for any External libraries, the JRE System libraries provide all you need.

I am infering that you have a org.w3c.dom.Document object you would like to write to a file

To do that, you use a 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

like image 31
DirkyJerky Avatar answered Oct 14 '22 15:10

DirkyJerky