1. 程式人生 > >xml檔案的讀寫

xml檔案的讀寫

1,xml檔案的讀取

    讀取xml檔案的方式有兩種,一種是面向模型的DOM方式,一種是面向事件的SAX方式

    DOM方式原理:一次性的將xml文件加入記憶體,在記憶體中形成一顆dom樹,然後通過語言對樹的節點進行操作。

   顯然這種操作查詢元素快,但是一次性的將檔案載入進來,要是小還行,檔案大的時候會增大記憶體負擔的,因此這種方式最好是解析小的xml檔案的時候用

SAX方式原理:邊讀邊解析,按照從做往右從上往下的順序解析。

   由於解析過的節點不能再次利用,要想使用還得再次解析,所以效率相對來說比較低,但只有事件觸發了才會去讀取檔案,所以記憶體不會很大。

   兩種方式,各有優缺點,誰也不能代替誰,舉個簡單的例子吧,就像生活中的自行車無法取代汽車,汽車無法取代自行車一樣,兩者各有優勢。根據具體需求選擇。


  DOM實現
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;


public class dom{
	public static void main(String args[])throws Exception{
		//建立檔案解析工廠
		DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();


		//使用工廠建立檔案解析類
		DocumentBuilder builder = dfactory.newDocumentBuilder();


		//開始解析檔案,將檔案載入進記憶體,形成dom樹
		Document document = builder.parse(new File("test.xml"));
		
		
		//獲取根節點並打印出來
		Node rootn = document.getFirstChild();
		System.out.println(rootn.getNodeName());
	}
}



    SAX實現:
import java.io.File;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class sax{
	public static void main(String args[])throws Exception{
		//建立解析物件
		SAXReader reader = new SAXReader();


		//讀取xml檔案
		Document document = reader.read(new File("test.xml"));


		//獲取根節點
		Element roote = document.getRootElement();
		//獲取根節點下面的子節點
		String childe = roote.elementText("學生");
		System.out.println(roote.getName());
		System.out.println(childe);
	}
}


    注意:需要匯入dom4j的jar包,如果不使用工具需要配置classpath環境變數才能使用jar。
       如果有多個學生標籤,會返回第一個標籤的內容。
   SAX實現+xpath
package com.bjpowernode.xml;


import java.io.File;


import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class SAXandxpath {
	public static void main(String[] args) throws Exception{
		
		SAXReader reader = new SAXReader();
		Document document = reader.read(new File("test.xml"));
		String xpath = "/test/學生";
		Element element = (Element)document.selectSingleNode(xpath);
		System.out.println(element.getText());
	}
}

    使用xpath達到快速定位的效果。使用時需要匯入相應的jar包

2,xml檔案的寫入

   Dom方式:使用dom方式寫入xml檔案(基於dom4j)

import java.io.FileWriter;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;


public class domwrite{
	public static void main(String args[])throws Exception{
		//建立一個文件物件
		Document document  = DocumentHelper.createDocument();


		//構造dom樹
		Element roote = document.addElement("學生資訊");
		Element chile = roote.addElement("學生");
		chile.addAttribute("id","1");
		chile.setText("shuangzhe");
		Element chile1 = roote.addElement("學生");
		chile1.addAttribute("id","2");
		chile1.setText("litongxue");


		
		//設定字元編碼方式
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("GB18030");


		//開始寫
		XMLWriter xmlWriter = new XMLWriter(new FileWriter("student.xml"),format);
		xmlWriter.write(document);
		xmlWriter.close();
	}
}


寫入後的檔案內容

<?xml version="1.0" encoding="GB18030"?>
<學生資訊>
  <學生 id="1">shuangzhe</學生>
  <學生 id="2">litongxue</學生>
</學生資訊>