| Author |
Java code to append data into a existing xml file
|
Ravi Doddi
Greenhorn
Joined: Jan 08, 2008
Posts: 5
|
|
Hai...... I have a jsp page in which there are some text fields. When I submit it, it goes to a servlet and I creates an xml file. So whenever I submit a new xml file is created, I need my previous data also present in it. Can anyone please help me, so that I can append data to an existing xml file. Thankyou.
|
 |
Paul Clapham
Bartender
Joined: Oct 14, 2005
Posts: 16487
|
|
You don't append data to an XML document. Doing that would cause it to be not well-formed. That's because an XML document must have a single root element. So your requirement to "append data into" an existing XML document must mean that you are adding an element (or maybe more than one) as the last child of the root element. That's how you should write your code. And really, your requirements should have been specific and said that in the first place.
|
 |
Ravi Doddi
Greenhorn
Joined: Jan 08, 2008
Posts: 5
|
|
Originally posted by Paul Clapham: You don't append data to an XML document. Doing that would cause it to be not well-formed. That's because an XML document must have a single root element. So your requirement to "append data into" an existing XML document must mean that you are adding an element (or maybe more than one) as the last child of the root element. That's how you should write your code. And really, your requirements should have been specific and said that in the first place.
Thanks for your reply. I'll make you more clear what I want. If this is my xml file <books> <person> <first>Tom</first> <last>Cruise</last> <age>45</age> </person> </books> Now when I append some data, I should have my previous data in it. Like <books> <person> <first>Tom</first> <last>Cruise</last> <age>45</age> </person> <person> <first>Tom</first> <last>Hanks</last> <age>48</age> </person> </books> This is how I want. But my data gets overwritten with previous data and I show up as <books> <person> <first>Tom</first> <last>Hanks</last> <age>48</age> </person> </books> So could you please suggest me some code. Thankyou
|
 |
Paul Clapham
Bartender
Joined: Oct 14, 2005
Posts: 16487
|
|
|
Okay, that's what I expected. So read your document into memory, create a new element, and add that new element as the last child of the document's root. Then write the document out again. DOM is a reasonably good technology for that.
|
 |
Ravi Doddi
Greenhorn
Joined: Jan 08, 2008
Posts: 5
|
|
This is what my code is first=doc.createElement("first"); first.appendChild(doc.createTextNode(firstName)); person.appendChild(first); last=doc.createElement("last"); last.appendChild(doc.createTextNode(lastName)); person.appendChild(last); age=doc.createElement("age"); age.appendChild(doc.createTextNode(ageYears)); person.appendChild(age); books.appendChild(person); doc.appendChild(books); I dont understand how do you append with this.
|
 |
deepika baghla
Greenhorn
Joined: Apr 25, 2008
Posts: 2
|
|
hey i am trying to overwrite values of elements in XML file. i am completely new and naive to access XML from java. so can you please send the complete java code of which you have given snippet here
|
 |
William Brogden
Author and all-around good cowpoke
Rancher
Joined: Mar 22, 2000
Posts: 12327
|
|
You really need to work through a good xml tutorial. Sun's seems to have gotten outrageously complicated so its a good thing that Harold's book is now available on line. Bill
|
Java Resources at www.wbrogden.com
|
 |
deepika baghla
Greenhorn
Joined: Apr 25, 2008
Posts: 2
|
|
i have gone through that site. but what i want is to overwrite data in XML file instead of overwriting entire xml file. here in the file, data value for tag <first> i.e. "Kiran" should be overwritten by new value say "ram" and same for other data also. please help .. I am stuck here
|
 |
William Brogden
Author and all-around good cowpoke
Rancher
Joined: Mar 22, 2000
Posts: 12327
|
|
If you are stuck it is because you are not thinking about the problem correctly.
what i want is to overwrite data in XML file instead of overwriting entire xml file.
You can't treat an XML file like a random access file of records that you can write bits into. You have to either: 1. using DOM methods read the whole XML document file into an in memory DOM object, modify it, write the whole document out to a file (over the old one or a new one) 2. using SAX methods, dynamically read the document, writing a new file as you go until your program recognizes where the new data should go, insert the new XML formatted data, then continue reading and writing. Emphatically not recommended for beginners. Bill
|
 |
jaytantra kumar
Greenhorn
Joined: Feb 03, 2012
Posts: 1
|
|
You can use the following code for Appending the data in any xml file using Servlets:
package mqtest;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;
public class XmlServlet extends HttpServlet{
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException,IOException{
/* String hostname="";
String hostip="";
String qmname="";
String hostport="";
String channel="";
if(request.getParameter("hostname")!=null
&& request.getParameter("hostip")!=null
&& request.getParameter("qmname")!=null
&& request.getParameter("hostport")!=null
&& request.getParameter("channel")!=null)
{
hostname = request.getParameter("hostname").toString();
hostip = request.getParameter("hostip").toString();
qmname = request.getParameter("qmname").toString();
hostport = request.getParameter("hostport").toString();
channel = request.getParameter("channel").toString();
}*/
String hostname = request.getParameter("hostname").toString();
String hostip = request.getParameter("hostip").toString();
String qmname = request.getParameter("qmname").toString();
String hostport = request.getParameter("hostport").toString();
String channel = request.getParameter("channel").toString();
try
{
System.out.println(hostname);
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
createXmlTree(hostname,hostip,qmname,hostport,channel);
System.out.println("<b>Xml File Created Successfully</b>");
}
catch(Exception e)
{
System.out.println(e);
}
}
public void createXmlTree(String hostname,String hostip,String qmname,String hostport,String channel) throws Exception {
Element root;
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = builderFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();
File file = new File("workspace_jay\\MyRighttPro\\properties.xml");
if (file.exists())
{
DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = fact.newDocumentBuilder();
doc = docBuilder.parse(file);
root = doc.getDocumentElement();
String sr = root.getNodeName();
//root = node.getNodeName();
}
else
{
//System.out.println(hostdetails);
root = doc.createElement("hostinformation");
doc.appendChild(root);
}
Element child = doc.createElement("hostdetails");
root.appendChild(child);
Element child1 = doc.createElement("hostname");
child.appendChild(child1);
Text text1 = doc.createTextNode(hostname);
child1.appendChild(text1);
Element child2 = doc.createElement("hostip");
child.appendChild(child2);
Text text2 = doc.createTextNode(hostip);
child2.appendChild(text2);
Element child3 = doc.createElement("qmname");
child.appendChild(child3);
Text text3 = doc.createTextNode(qmname);
child3.appendChild(text3);
Element child4 = doc.createElement("hostport");
child.appendChild(child4);
Text text4 = doc.createTextNode(hostport);
child4.appendChild(text4);
Element child5 = doc.createElement("channel");
child.appendChild(child5);
Text text5 = doc.createTextNode(channel);
child4.appendChild(text5);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
transformer.transform(source, result);
String xmlString = sw.toString();
FileWriter fw=new FileWriter(file,false);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(xmlString);
bw.flush();
bw.close();
}
}
|
 |
 |
|
|
subject: Java code to append data into a existing xml file
|
|
|