2012-06-09 48 views
4

我有一個xml文件,看起來像這樣。 employees.xml如何使用java寫入現有的XML文件

<Employees> 
    <Employee> 
     <FirstName>myFirstName</FirstName> 
     <LastName>myLastName</LastName> 
     <Salary>10000</Salary> 
    <Employee> 
</Employees> 

現在怎麼辦我添加新的員工元素添加到現有的XML文件?..一個例子代碼高度讚賞。

+2

在文件中讀取,在內存中進行修改,寫出完整的文件一個新的。你還沒有陷入使用平面文件作爲數據庫的陷阱? –

+1

@ThorbjørnRavn Andersen - XML並非真正的平面文件格式。 –

+1

@DonRoby真的嗎?那麼它是什麼(當在這種情況下它被存儲在一個文件中)? –

回答

2

要添加到現有的XML文件中,通常需要將其讀入內部數據結構,在內部表單中添加所需的數據,然後將其全部寫出來,覆蓋原始文件。

內部結構可以是DOM,也可以是您自己製作的內部結構,並且可以通過多種方式讀取和寫入。

如果數據相當小,DOM可能是最簡單的,並且在this related question的答案中有一些示例代碼。

如果你的數據很大,DOM不會這樣做。可能的方法是使用SAX讀取和寫入(儘管SAX傳統上只是讀取機制),如another related question的答案中所述。

您可能還想要考慮JAXB或(甚至最好)StAX

+0

非常感謝您提供豐富的答案。是的,數據會有點大。 –

2

請使用xstream將文件解析爲對象,或者與員工創建列表,然後直接將其轉換爲xml。

+0

哇,這很快。我將能夠寫入數據到現有的XML文件??我的意思是我需要爲現有的XML文件添加新的節點.. –

1

您需要使用DOM來編寫/編輯您的xml文件。
這很容易:
你只需要創建節點並添加屬性。
您也可以使用DOM編寫/編輯XSLT文件。
剛剛搜索谷歌的DOM java

+0

謝謝你的傢伙。我試過Dom。但是我遇到的問題是我無法將新節點寫入現有的xml文件。 –

+1

相反,它非常容易,你只需要解析它,然後搜索你需要添加新節點的節點,然後添加所需的節點。 – GingerHead

2

我覺得這個鏈接可能對你有用。

在這裏,你有如何讀/解析,修改(添加元素)和保存(再次寫入XML文件)的示例。

下面的示例,你可以在這裏找到:http://www.petefreitag.com/item/445.cfm

閱讀:

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
Document doc = docBuilder.parse("/path/to/file.xml"); 

修改:

// attributes 
Node earth = doc.getFirstChild(); 
NamedNodeMap earthAttributes = earth.getAttributes(); 
Attr galaxy = doc.createAttribute("galaxy"); 
galaxy.setValue("milky way"); 
earthAttributes.setNamedItem(galaxy); 

// nodes 
Node canada = doc.createElement("country"); 
canada.setTextContent("ca"); 
earth.appendChild(canada); 

寫XML文件:

Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 

//initialize StreamResult with File object to save to file 
StreamResult result = new StreamResult(new StringWriter()); 
DOMSource source = new DOMSource(doc); 
transformer.transform(source, result); 

String xmlString = result.getWriter().toString(); 
System.out.println(xmlString); 
5

你不能'點頭點頭es到現有的XML文件。「您可以將現有的XML文件讀入內存,添加到數據模型中,然後編寫一個新文件。您可以重命名舊文件並使用舊名稱來編寫新文件。但是沒有常用的Java實用程序來修改XML文件。