使用Dom4j對XML文件的各種操作
由于同學的畢設的問題,讓我給她寫個對XML文件的操作的代碼;還好,這里自己很熟悉;這么晚了,就把自己對Dom4j對XML文件的操作的一些心得寫上來和大家分享。至于如何導入Dom4j的jar包,就不講了。直接進入重點:
由于Dom4j采用面向接口方式編程,因此程序在處理XML解析時更加靈活,而且由于Dom4j實質上是以其他XML解析器為基礎的,采用面向接口編程的方式將允許Dom4j的底層在不同的解析機制之間自由轉換;
首先建立一個XML文件:
由于同學的畢設的問題,讓我給她寫個對XML文件的操作的代碼;還好,這里自己很熟悉;這么晚了,就把自己對Dom4j對XML文件的操作的一些心得寫上來和大家分享。至于如何導入Dom4j的jar包,就不講了。直接進入重點: /*
* 建立xml文件,并寫入根節點
*/
void createXML() {
// 如果文件存在則不建立xml文件
File file = new File(documentName);
if (file.exists()) {
return;
}
DocumentFactory factory = new DocumentFactory();
Document document = factory.createDocument();
// 建立根節點
document.addElement(rootName);
// 建立一個xml文件,將Dom4j樹寫入xml文件
try {
FileWriter fw = new FileWriter(documentName);
XMLWriter writer = new XMLWriter(fw);
writer.write(document);
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
根據提供的文件名和根節點建立一個XML文件;建立以個DOM樹,然后將這個DOM樹寫入到文件中;
以下是實現XML文件的增、刪、改、查功能,代碼如下: /*
* 新添打折賓館信息
*/
public void addHotel(String id, String price, String name, String address,
String beginTime, String endTime) {
SAXReader reader = new SAXReader();
reader.setStripWhitespaceText(true);
try {
Document document = reader.read(new File(documentName));
// 獲取根節點
Element root = document.getRootElement();
// 添加一個新的hotel節點
Element hotel = root.addElement("hotel");
// 添加和設置新hotel節點信息
hotel.addAttribute("id", id);
Element priceElement = hotel.addElement("price");
Element nameElement = hotel.addElement("name");
Element addressElement = hotel.addElement("address");
Element beginTimeElement = hotel.addElement("beginTime");
Element endTimeElement = hotel.addElement("endTime");
priceElement.setText(price);
nameElement.setText(name);
addressElement.setText(address);
beginTimeElement.setText(beginTime);
endTimeElement.setText(endTime);
FileWriter fw = new FileWriter(documentName);
XMLWriter writer = new XMLWriter(fw);
writer.write(document);
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 根據賓館呢id,查找賓館打折信息
*/
String[] queryHotel(String id) {
SAXReader reader = new SAXReader();
String[] queryResult = new String[6];
int index = 0;
try {
Document document = reader.read(new File(documentName));
// 獲取根節點
Element root = document.getRootElement();
// 獲取根節點包含的所有子節點
List nodes = root.elements();
Element e;
List sunNodes;
Element sunE;
for (Object element : nodes) {
e = (Element)element;
// 如果id值與設定的id值相等,則遍歷該節點,獲取信息
if ((e.attribute("id")).getText().equals(id)) {
// 獲取當前子節點的所有子節點
sunNodes = e.elements();
queryResult[index++] = id;
for (Object sunElement : sunNodes) {
sunE = (Element)sunElement;
queryResult[index++] = sunE.getTextTrim();
}
break;
}
}
} catch (DocumentException e) {
e.printStackTrace();
}
return queryResult;
}
/*
* 根據賓館id,查找相應賓館,并修改賓館信息
*/
void modifyHotel(String id, String price, String name, String address,
String beginTime, String endTime) {
SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File(documentName));
// 獲取根節點
Element root = document.getRootElement();
// 獲取根節點包含的所有子節點
List nodes = root.elements();
Element e;
List sunNodes;
for (Object element : nodes) {
e = (Element)element;
int index = 0;
// 如果id值與設定的id值相等,則遍歷該節點,獲取信息
if ((e.attribute("id")).getText().equals(id)) {
// 獲取當前子節點的所有子節點
sunNodes = e.elements();
for (Object sunElement : sunNodes) {
if (index == 0) {
((Element)sunElement).setText(price);
}
if (index == 1) {
((Element)sunElement).setText(name);
}
if (index == 2) {
((Element)sunElement).setText(address);
}
if (index == 3) {
((Element)sunElement).setText(beginTime);
}
if (index == 4) {
((Element)sunElement).setText(endTime);
}
index++;
}
break;
}
}
FileWriter fw = new FileWriter(documentName);
XMLWriter writer = new XMLWriter(fw);
writer.write(document);
fw.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
/*
* 根據id,刪除指定hotel信息
*/
void deleteHotel(String id) {
SAXReader reader = new SAXReader();
try {
Document document = reader.read(new File(documentName));
// 獲取根節點
Element root = document.getRootElement();
// 獲取根節點包含的所有子節點
List nodes = root.elements();
Element e;
for (Object element : nodes) {
e = (Element)element;
// 如果id值與設定的id值相等,則遍歷該節點,獲取信息
if ((e.attribute("id")).getText().equals(id)) {
// 刪除該節點
root.remove(e);
break;
}
}
FileWriter fw = new FileWriter(documentName);
XMLWriter writer = new XMLWriter(fw);
writer.write(document);
fw.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
講解,到此完畢,主要是代碼,很簡單。如果有什么問題,請大家提出來!!!
轉自:http://blog.csdn.net/vipygd/article/details/7584077