xml檔案的讀寫
阿新 • • 發佈:2019-02-06
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</學生>
</學生資訊>