關於dom4j對xml檔案實現增刪改創的操作

javascript前鋒發表於2014-01-06

對xml操作的方式很多,這裡主要講的是dom4j.jar對xml的解析方式,以及一些常規操作,原始碼很簡單。

建立xml截圖:

插入資訊後截圖:

增加的事科教節點。

修改資訊截圖:

移除資訊截圖:

以上截圖是程式碼實現的對整個xml的簡單建立,程式碼簡單,切勿見怪。具體參看程式碼註釋。

package trs.li.parsexml;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**解析xml檔案
 * @author trsli
 * 該類主要是個人簡單學習dom4j.jar關於解析xml的方式,不具備實用性
 * 節點深度在一定程度上會增加難度,這裡我就採用了兩層,這是一大敗筆。
 * */
public class ParseXMLDemo {
	public static void main(String[] args) {
		try {
			//createXML();//1建立
			//insertXML();//2插入資訊
			//modifyXML();//3修改
			delXML();//4移除
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**建立xml檔案
	 * 注:剛開始在這裡犯了一個錯誤,後來才知道只有跟節點才是通過document.addElement()建立的
	 * 由於操作的大致方式與javascript DOM操作類似,所以學習解析xml對於學javascript還是很有好處的
	 * */
	private static void createXML() throws Exception{
		String filename="E:\\book.xml";
		Document document=DocumentHelper.createDocument();
		Element element=document.addElement("books");
		element.addAttribute("id", "books");
		element.addComment("這是一行註釋");
		
		Element celement=element.addElement("book");
		celement.addComment("這是一個節點");
		celement.addAttribute("value", "小說");
		celement.setText("紅樓夢");
		//element.add(celement);
		
		Element element1=element.addElement("book");
		element1.addAttribute("value", "技術");
		element1.setText("C++");
		//element.add(element1);
		
		Element element2=element.addElement("book");
		element2.addAttribute("value", "教材");
		element2.setText("語文");
		//element.add(element2);
		
		XMLWriter xmlWriter=new XMLWriter(new FileOutputStream(new File(filename)));
		xmlWriter.write(document);
		System.out.println("建立成功...");
		xmlWriter.close();
	}
	/**向xml中插入新資料
	 * addComment()為增加註釋
	 * */
	private static void insertXML()throws Exception {
		Document document=null;
		SAXReader reader=new SAXReader();
		document=reader.read("E:\\book.xml");
		Element element=document.getRootElement();//獲取根節點
		//Element ele=element.element("books");
		Element book=element.addElement("book");
		book.addComment("這是追加的");
		book.addAttribute("value", "科教");
		book.setText("星球大戰");
		
		XMLWriter xmlWriter=new XMLWriter(new FileOutputStream(new File("E:\\book.xml")));
		xmlWriter.write(document);
		System.out.println("插入成功....");
	}
	/**修改xml文字
	 * 這裡主要是修改屬性和節點文字資訊
	 * */
	private static void modifyXML()throws Exception {
		Document document=null;
		SAXReader reader=new SAXReader();
		document=reader.read("E:\\book.xml");
		List list=document.selectNodes("/books/book/@value");//查詢屬性
		Iterator it=list.iterator();
		while(it.hasNext()){
			Attribute attr=(Attribute)it.next();//屬性遍歷
			if(attr.getValue().equals("科教")){
				System.out.println("開始修改....");
				attr.setValue("科幻小說");
			}
		}
		//查詢結點
		List list1=document.selectNodes("/books/book");
		Iterator it1=list1.iterator();
		while(it1.hasNext()){
			Element element=(Element) it1.next();//節點遍歷
			if(element.getText().equals("語文")){
				System.out.println("開始修改2.....");
				element.setText("數學");
			}
		}
		XMLWriter xmlwriter = new XMLWriter(new FileOutputStream("E:\\book.xml"));
		xmlwriter.write(document);
		System.out.println("完成....");
		xmlwriter.close();
	}
	/**刪除xml內容
	 * 如果有更加深的節點需要刪除,可以採用多層遍歷
	 * */
	private static void delXML()throws Exception{
		Document document=null;
		SAXReader reader=new SAXReader();
		document=reader.read("E:\\book.xml");
		Element root=document.getRootElement();
		List list=document.selectNodes("/books/book");
		Iterator it=list.iterator();
		while(it.hasNext()){
			Element element=(Element) it.next();
			if(element.getText().equals("數學")){
				System.out.println("刪除...");
				root.remove(element);
			}
		}
		XMLWriter xmlwriter = new XMLWriter(new FileOutputStream("E:\\book.xml"));
		xmlwriter.write(document);
		System.out.println("刪除成功...");
		xmlwriter.close();
	}
}


文章完。

相關文章