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> Vinod1@yahoo.com </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 = (Element) element1.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> Vinod1@yahoo.com </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> Vinod1@yahoo.com </Emp_E-mail>
</Employee>
</Employee-Detail> |

|