Cloning a XML Element

In this section, you will learn to create a clone of a element in the DOM tree. In general, the cloning means to create a duplicate.

Cloning a XML Element

Cloning a XML Element

     

In this section, you will learn to create a clone of a  element in the DOM tree. In general, the cloning means to create a duplicate. 

Description of a program:

The following program helps you in creating a clone of any element of the specified XML file. For creating a DOM object ,  you need the  DocumentBuilderFactoty and the DocumentBuilder objects. After parsing it displays a xml file on the console using the transform() method. At  run time the program asks for a  element name to clone . Here the element1.cloneNode(true) method creates a clone and element1.getParentNode().insertBefore(copyElement, element1.getNextSibling()) inserts the clone element at the specified position.

Here is the XML File: Employee-Detail2.xml

<?xml version = "1.0" ?>
<Employee-Detail>
<Employee>
<Emp_Id> E-001 </Emp_Id>
<Emp_Name> Vinod </Emp_Name>
<Emp_E-mail> [email protected] </Emp_E-mail>
</Employee>
</Employee-Detail>

Here is the Java File: DOMCloneElements.java

import java.io.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import javax.xml.parsers.*;
import javax.xml.transform.*; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult;

public class DOMCloneElements {
  static public void main(String[] arg){
  try  {
  BufferedReader bf = new BufferedReader(
   new 
InputStreamReader(System.in));
  System.out.print("Enter XML file name: ");
  String xmlFile = bf.readLine();
  File file = new File(xmlFile);
  if (file.exists()){
  DocumentBuilderFactory factory = 
  DocumentBuilderFactory.newInstance
();
  DocumentBuilder builder = factory.newDocumentBuilder();
  Document doc = builder.parse(xmlFile);
  TransformerFactory tFactory = 
   TransformerFactory.newInstance
();
  Transformer tformer = tFactory.newTransformer();
  Source source = new DOMSource(doc);
  Result result = new StreamResult(System.out);
  System.out.println(xmlFile + " file: ");
  tformer.transform(source, result);
  System.out.println();
  System.out.print("Enter the element to clone: ");
  String clone = bf.readLine();
  System.out.print("Enter data to add: ");
  String addElement = bf.readLine();
  ////////////////////////////////
  NodeList list = doc.getElementsByTagName
(clone);
  Element element1 = (Element)list.item(0);
  Element copyElement = (Elementelement1.cloneNode(true);
  element1.getParentNode().insertBefore(copyElement, 
    element1.getNextSibling
());
  element1.appendChild(doc.createTextNode(addElement));
  tformer.transform(source, result);
  }
  else{
  System.out.println("File not found!");
  }
  }
  catch (Exception e){
  e.getMessage();
  }
  }
}

Download this example.

 Output of this program:

C:\vinod\xml>javac DOMCloneElements.java

C:\vinod\xml>java DOMCloneElements
Enter XML file name: Employee-Detail2.xml
Employee-Detail2.xml file:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employee-Detail>
<Employee>
<Emp_Id> E-001 </Emp_Id>
<Emp_Name> Vinod </Emp_Name>
<Emp_E-mail> [email protected] </Emp_E-mail>
</Employee>
</Employee-Detail>
Enter the element to clone: Emp_Id
Enter data to add: E011
<?xml version="1.0" encoding="UTF-8" standalone="no"?><Employee-Detail>
<Employee>
<Emp_Id> E-001 E011</Emp_Id><Emp_Id> E-001 </Emp_Id>
<Emp_Name> Vinod </Emp_Name>
<Emp_E-mail> [email protected] </Emp_E-mail>
</Employee>
</Employee-Detail>