2013-01-10 121 views
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); 

我能够创建文件,但下次需要追加到xml中不能创建。在java中追加到xml文件中

回答

0

这个Java代码的工作,以新的节点追加到XML文件......这是基于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(); 
} 

} 
    } 

你应该看看JAXB API。如果我理解正确的,你的XML是这样的:

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

因此,代码如下:

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); 
+0

谢谢Sathish! –

-1

我觉得代码new FileWriter(file, true)将帮助您将数据追加到已存在的文件。

+0

不相关代码的单行?这完全不是答案 –

0

有一个versionmarshall需要Writer。看看this线程,创建一个FileWriter并使用它。

2

它不会这样工作。你必须为客户创造一流的

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

要添加您需要解组customers.xml,新客户再次添加到客户列表和客户元帅到customers.xml一个客户每次。

+0

对于每一个读/写,你必须解组和编组整个文件? – CodyBugstein