xml一種格式嚴謹,通用,表述數據良好的語言,它有存儲數據的功能,這一點和數據庫相似.
dom和sax是兩種不同的解析xml文件的機制.在解析大型xml文件時,宜選用sax技術.
下面以判斷users.xml文件中,是否存在id 爲"003"的用戶爲例,簡要介紹一下sax技術.
首先準備一個xml文件.usrs.xml 代碼如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <users>
- <user id="001">
- <username>james</username>
- <password>james</password>
- </user>
- <user id="002">
- <username>adu</username>
- <password>adu</password>
- </user>
- <user id="003">
- <username>root</username>
- <password>root</password>
- </user><user id="004">
- <username>lishanli</username>
- <password>lishanli</password>
- </user>
- </users>
創建IsExistedUserHandler類,它派生自DefaultHandler.代碼如下:
- package org.james.sax.util;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- public class IsExistedUserHandler extends DefaultHandler {
- private String id;
- public IsExistedUserHandler(String id){
- this.id=id;
- }
- @Override
- public void startElement(String url, String localName, String qName,
- Attributes atts) throws SAXException {
- if(atts!=null){
- String userID=atts.getValue("id");
- if(userID!=null){
- if(userID.equals(id)){//當解析到id屬性與構造函數中的id一樣時,說明,存在該用戶.
- throw new SAXException("己經存在該用戶!");//由於,sax在解析過程中不能停止,此時卻需要停止,可以採用/拋出異常的方式,終止解析.
- }
- }
- }
- }
- }
好了,現在寫一個測試類,測試一下吧
- package org.james.sax;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- import org.james.sax.util.IsExistedUserHandler;
- import org.xml.sax.SAXException;
- public class UserService {
- private static InputStream IN =UserService.class.getClassLoader().getResourceAsStream("users.xml");
- private SAXParser saxParser;
- public UserService(){
- try {
- saxParser=SAXParserFactory.newInstance().newSAXParser();
- } catch (ParserConfigurationException e) {
- e.printStackTrace();
- } catch (SAXException e) {
- e.printStackTrace();
- }
- }
- public boolean isExistedUser(String id){
- IsExistedUserHandler ieuh=new IsExistedUserHandler (id);
- try {
- saxParser.parse(IN, ieuh);
- } catch (SAXException e) {
- System.out.println(e.getMessage());
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- }
- return false;
- }
- public static void main(String... args){
- UserService us=new UserService();
- System.out.println(us.isExistedUser("003"));
- }
- }
看看控制檯輸出什麼?
-------------------------------
己經存在該用戶!
true
--------------------
哈哈,說明成功了!