xml是用於存儲配置信息的文件。說到底xml文件就是一棵樹,一顆大大的樹,能存儲很多關係型的信息。有時候需要對xml文件進行讀寫等操作,那麼有什麼方法可以對其進行讀寫呢?
主要有兩種方式:一、使用DOM4J解析包對其進行讀寫 二.使用SAX解析包對其進行讀取,不可寫入
一,DOM4J解析包解析xml文檔(讀寫)
主要分爲一下幾個步驟:
1.獲取DOM解析器。DocumentBuilder documentBuilder=DocumentBuilderFactory.newInstance().newDocumentBuilder();
2.加載xml文檔。Document document=documentBuilder.parse("src/exam.xml");
3.創建或者獲取元素節點:Element nodeStudent=document.createElement("Student"); //獲取可以使用相應的getXXX方法
4.寫入到xml文檔:Transformer tf=TransformerFactory.newInstance().newTransformer();
tf.transform(new DOMSource(document), new StreamResult("src/exam.xml"));
在使用DOM解析xml時,java中提供了很多方法來操作xml文檔,方法大體上與javascript中獲取元素節點和創建節點類似,沒有很大區別
二、SAX解析xml文檔
主要有一下幾個步驟:
1.獲取SAX解析器
2.獲取XML讀取器
3.註冊內容處理器
4.加載xml文檔
實例:演示SAX解析的時機
package com.sax_parser;
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
/**
* 演示SAX解析的各個時機
* @author Administrator
*
*/
public class SaxParser {
/**
* @param args
* @throws SAXException
* @throws ParserConfigurationException
* @throws IOException
*/
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
// TODO Auto-generated method stub
//創建一個解析器
SAXParser sax=SAXParserFactory.newInstance().newSAXParser();
//獲取讀取器
XMLReader reader=sax.getXMLReader();
//註冊內容處理器
reader.setContentHandler(new DefaultHandler(){
/**
* 開始讀取xml文檔時調用
*/
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("開始讀取文檔了");
}
/**
* 讀取完xml文檔時調用
*/
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
System.out.println("文檔讀取結束了");
}
/**
* 讀取標籤元素的開始標誌
*/
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
System.out.println(qName+"----標籤開始讀取了");
}
/**
* 讀取標籤元素的結束標誌
*/
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
System.out.println(qName+"----標籤讀取結束了");
}
/**
* 讀取標籤內容
*/
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println("讀取到的字符是==="+new String(ch,start,length));
}
});
//加載文檔
reader.parse("src/exam.xml");
}
}
讀取xml文檔主要有這兩種技術,但他們又有所區別,DOM技術是解析整個xml文檔後再讀寫,讀寫速度快,但佔用大量的內存空間。SAX是邊解析邊讀取,佔用內存不大,但效率低些