1
File file = new File("E:\\file.xml");

JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);

Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

jaxbMarshaller.marshal(customer, file);     

jaxbMarshaller.marshal(customer, System.out);

I am able to create file ,but next time want append into xml not create.

4 Answers 4

2

It wont work this way. You have to create Customers class

@XmlRootElement
class Customers {
   @XmlElement(name="customer")
   List<Customer> customers;
}

Each time you want to add a Customer you need to unmarshal customers.xml, add the new Customer to Customer list and marshal Customers into customers.xml again.

Sign up to request clarification or add additional context in comments.

1 Comment

For every read/write, you must unmarshal and marshal the entire file?
0

this java code works to append new node to the xml file......it is based on DOM

import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.FileOutputStream;
public class writexml1 {

public static void main (String args[]) 
{

File docFile = new File("..\\jquery\\WebContent\\demo\\testing.xml");

Document doc = null;
try 
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(docFile);
} 
catch (java.io.IOException e) 
{
System.out.println("Can't find the file");
} 
catch (Exception e) 
{
System.out.print("Problem parsing the file.");
}

Element root = doc.getDocumentElement();

System.out.println("The root element is " + root.getNodeName() + ".\n");

NodeList children = root.getChildNodes();
System.out.print("There are "+children.getLength()+" child elements.\n");
System.out.print("They are: \n");

//Print the file 
for (Node child = root.getFirstChild();child != null;child = child.getNextSibling())
{
if (child.getNodeType() == child.TEXT_NODE)
{
System.out.println("Text: "+child.getNodeValue());
} 
else if (child.getNodeType() == child.ELEMENT_NODE) 
{
System.out.println(child.getNodeName()+" = "+child.getFirstChild().getNodeValue());
}
}


//NodeList deleteElement = root.getElementsByTagName("staff");

//Node deleteNode= deleteElement.item(0);

//root.removeChild(deleteNode); 
Element staffElement = doc.createElement("staff");

Node updateText = doc.createTextNode("");
staffElement.appendChild(updateText);
//
Element firstName = doc.createElement("firstname");
String str_firstName="added firstname";
Node firstNameNode = doc.createTextNode(str_firstName);
firstName.appendChild(firstNameNode);

staffElement.appendChild(firstName);

//

Element lastName = doc.createElement("lastname");
String str_lastName="added lastname";
Node lastNameNode = doc.createTextNode(str_lastName);
lastName.appendChild(lastNameNode);

staffElement.appendChild(lastName);


//
Element nickName = doc.createElement("nickname");
String str_nickName="added nickname";
Node nickNameNode = doc.createTextNode(str_nickName);
nickName.appendChild(nickNameNode);

staffElement.appendChild(nickName);


//
Element salary = doc.createElement("salary");
String str_salary="$10,000";
Node salaryNode = doc.createTextNode(str_salary);
salary.appendChild(salaryNode);

staffElement.appendChild(salary);


//
root.appendChild(staffElement);

//Node StaffNode=(Node)updateElement;





try{
String outputURL = "..\\jquery\\WebContent\\demo\\testing.xml";

DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new FileOutputStream(outputURL));

TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();

transformer.transform(source, result);

} catch (Exception e) {
e.printStackTrace();
}

}   
   }

or

you should check out the JAXB API. If I understand right, you're xml looks like this:

<B>
    <C>11</C>
    <D>21</D>
    <E>31</E>
</B>

So code would be:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAccessType;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class B {
    @XmlElement public String C; // sloppy, probably should be type Integer or something
    @XmlElement public String D;
    @XmlElement public String E;
}

// then, somewhere else in your code you want to serialize...
B b = new B();
b.C = "11";
b.D = "21";
b.E = "31";

JAXBContext c = JAXBContext.newInstance(B.class);

// where w is a Writer instance
c.createMarshaller().marshal(b, w);

Comments

0

There is a version of marshall that takes an Writer. Have a look at this thread, create a FileWriter and use it.

Comments

-1

I think the code new FileWriter(file, true) will help you to append the data into already existing file.

1 Comment

A single liner of irrelated code? This is not an answer at all

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.