Java針對XML檔案的操作大集合
XML是工作上常用到的資料交換格式,會需要利用JAVA進行XML資料的新增、修改或刪除,這裡把相關的方法記錄下來。
下述範例會存取在C:\Projects\Javas\中的sample.xml檔,而檔案中已經有以下的內容:
<?xml version="1.0" encoding="utf-8"?>
<root>
<item>
<productID>10001</productID>
<productName>產品名稱1</productName>
<productPrice>10</productPrice>
</item>
<item>
<productID>10002</productID>
<productName>產品名稱2</productName>
<productPrice>20</productPrice>
</item>
<item>
<productID>10003</productID>
<productName>產品名稱3</productName>
<productPrice>30</productPrice>
</item>
</root>
利用Java存取XML我選用的Library是dom4j,可參考官網的介紹,以下是JAVA存取的程式範例:
package CDIT.stanley;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class dom4jXMLFullSample {
//新增XML Node內容
public static String XMLAppendNode(String xmlFilePath, String productID, String productName, String productPrice){
String appendStatus = "0";
try {
SAXReader reader = new SAXReader();
Document document = reader.read(xmlFilePath);
Element root = document.getRootElement();
Element item = root.addElement("item");
item.addElement("productID").setText(productID);
item.addElement("productName").setText(productName);
item.addElement("productPrice").setText(productPrice);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFilePath),format);
writer.write(document);
writer.close();
appendStatus = "1";
} catch (DocumentException e) {
return appendStatus;
} catch (UnsupportedEncodingException e) {
return appendStatus;
} catch (FileNotFoundException e) {
return appendStatus;
} catch (IOException e) {
return appendStatus;
}
return appendStatus;
}
//修改XML Node內容
public static String XMLChangeNodeValue(String xmlFilePath, String productID, String productName, String productPrice){
String updateStatus = "0";
try {
SAXReader reader = new SAXReader();
Document document = reader.read(xmlFilePath);
Element root = document.getRootElement();
@SuppressWarnings("rawtypes")
Iterator it = root.elementIterator();
while (it.hasNext()) {
Element element = (Element) it.next();
if(productID.equals(element.elementText("productID"))){
try {
element.element("productName").setText(productName);
element.element("productPrice").setText(productPrice);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFilePath),format);
writer.write(document);
writer.close();
updateStatus = "1";
} catch (IOException e) {
return updateStatus;
}
}
}
return updateStatus;
} catch (DocumentException e) {
return updateStatus;
}
}
//刪除XML Node
public static String XMLRemoveNode(String xmlFilePath , String productID){
String removeStatus = "0";
try {
SAXReader reader = new SAXReader();
Document document = reader.read(xmlFilePath);
Element root = document.getRootElement();
@SuppressWarnings("rawtypes")
Iterator it = root.elementIterator();
while (it.hasNext()) {
Element element = (Element) it.next();
if(productID.equals(element.elementText("productID"))){
try {
element.element("item");
element.detach();
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("utf-8");
XMLWriter writer = new XMLWriter(new FileOutputStream(xmlFilePath),format);
writer.write(document);
writer.close();
removeStatus = "1";
} catch (IOException e) {
return removeStatus;
}
}
}
return removeStatus;
} catch (DocumentException e) {
return removeStatus;
}
}
public static void main (String[] args){
String xmlFilePath = "C:\\Projects\\Javas\\sample.xml";
//新增
XMLAppendNode(xmlFilePath , "10004", "產品名稱4", "40");
//修改
XMLChangeNodeValue (xmlFilePath , "10001", "測試修改", "100");
//刪除
XMLRemoveNode (xmlFilePath , "10002");
}
}
上述程式進行完後,會將原本的XML檔變成如下的內容:
<?xml version="1.0" encoding="utf-8"?>
<root>
<item>
<productID>10001</productID>
<productName>測試修改</productName>
<productPrice>100</productPrice>
</item>
<item>
<productID>10003</productID>
<productName>產品名稱3</productName>
<productPrice>30</productPrice>
</item>
<item>
<productID>10004</productID>
<productName>產品名稱4</productName>
<productPrice>40</productPrice>
</item>
</root>
