23

How can I create the below XML using Java DOM, I want to create it from scratch. Is there any way? I don't want to read it and clone it, I just want to create it by DOM methods.

Java Example:

Node booking=new Node();
Node bookingID=new Node();
booking.add(bookingID);

XML Example:

<tns:booking>
    <tns:bookingID>115</tns:bookingID>
    <tns:type>double</tns:type>
    <tns:amount>1</tns:amount>
    <tns:stayPeriod>
        <tns:checkin>
            <tns:year>2013</tns:year>
            <tns:month>11</tns:month>
            <tns:date>14</tns:date>
        </tns:checkin>
        <tns:checkout>
            <tns:year>2013</tns:year>
            <tns:month>11</tns:month>
            <tns:date>16</tns:date>
        </tns:checkout>
    </tns:stayPeriod>
</tns:booking>
4

1 Answer 1

27

Besides the tutorials mentioned already, here is a simple example that uses javax.xml.transform and org.w3c.dom packages:

import java.io.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
import com.sun.org.apache.xerces.internal.dom.DocumentImpl;

public class XML {
    public static void main(String[] args) {
        XML xml = new XML();
        xml.makeFile();
    }

    public void makeFile() {
        Node item = null;
        Document xmlDoc = new DocumentImpl();
        Element root = xmlDoc.createElement("booking");
        item = xmlDoc.createElement("bookingID");
        item.appendChild(xmlDoc.createTextNode("115"));
        root.appendChild(item);
        xmlDoc.appendChild(root);

        try {
            Source source = new DOMSource(xmlDoc);
            File xmlFile = new File("yourFile.xml");
            StreamResult result = new StreamResult(new OutputStreamWriter(
                                  new FileOutputStream(xmlFile), "ISO-8859-1"));
            Transformer xformer = TransformerFactory.newInstance().newTransformer();
            xformer.transform(source, result);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}
Sign up to request clarification or add additional context in comments.

3 Comments

thx a lot for the big help, is there also anyway to convert String tags="<tns:checkin> <tns:year>2013</tns:year> <tns:month>11</tns:month> <tns:date>14</tns:date> </tns:checkin>"; intoxml file directly ?
Not that I'm aware. One approach would be to split them and iterate through the keys/values, calling createElement and appendChild for keys and values respectively.
It's not a good idea to use an internal implementation class; it may not be available when using a different JDK. Best to stick with public API.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.