Merging xml file using java NodeList
java, merge, nodelist, parsing, xml
Solution
In order to do that on your own. You should do this following :
public static void mergeXML(){
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
Document doc = null;
Document doc2 = null;
try {
db = dbf.newDocumentBuilder();
doc = db.parse(new File("D:\\Loic_Workspace\\Test2\\res\\test.xml"));
doc2 = db.parse(new File("D:\\Loic_Workspace\\Test2\\res\\test2.xml"));
NodeList ndListFirstFile = doc.getElementsByTagName("staff");
Node nodeArea = doc.importNode(doc2.getElementsByTagName("area").item(0), true);
Node nodeCity = doc.importNode(doc2.getElementsByTagName("city").item(0), true);
ndListFirstFile.item(0).appendChild(nodeArea);
ndListFirstFile.item(0).appendChild(nodeCity);
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new StringWriter());
transformer.transform(source, result);
Writer output = new BufferedWriter(new FileWriter("D:\\Loic_Workspace\\Test2\\res\\testFinal.xml"));
String xmlOutput = result.getWriter().toString();
output.write(xmlOutput);
output.close();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Final output of testFinal.xml :
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<company>
<staff>
<name>john</name>
<phone>465456433</phone>
<email>gmail1</email>
<area>area1</area>
<city>city1</city>
</staff>
</company>
As you want it ;-)
Hope it helps,
Problem
I'm trying to merge two xml files as shown below but i can't able to get the desired output please help me thank you Java code: ``` DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setIgnoringComments(true); DocumentBuilder builder = domFactory.newDocumentBuilder(); Document doc = builder.parse(new File("file1.xml")); Document doc1 = builder.parse(new File("file2.xml")); NodeList nodes = doc.getElementsByTagName("staff"); NodeList nodes1 = doc1.getElementsByTagName("staff"); for(int i=0;i<nodes1.getLength();i=i+1){ Node n= (Node) doc.importNode(nodes1.item(i), true); nodes.item(i).getParentNode().appendChild(n); } Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); StreamResult result = new StreamResult(new StringWriter()); DOMSource source = new DOMSource(doc); transformer.transform(source, result); Writer output = null; output = new BufferedWriter(new FileWriter("mergedxml.xml")); String xmlOutput = result.getWriter().toString(); output.write(xmlOutput); output.close(); System.out.println("merge complete"); ``` File1.xml ``` <company> <staff> <name>john</name> <phone>465456433</phone> <email>gmail1</email> </staff> </company> ``` File2.xml ``` <company> <staff> <area>area1</area> <city>city1</city> </staff> </company> ``` Current output: ``` <company> <staff> <name>john</name> <phone>465456433</phone> <email>gmail1</email> </staff> <staff> <area>area1</area> <city>city1</city> </staff> </company> ``` Expected Output: ``` <company> <staff> <name>john</name> <phone>465456433</phone> <email>gmail1</email> <area>area1</area> <city>city1</city> </staff> </company> ```