sax解析xml檔案(三)
阿新 • • 發佈:2019-02-08
在實際開發中,我們經常需要將資料庫的一條記錄,封裝成bean,然後儲存到集合裡面.
那麼,我們也可以利sax 將xml檔案中的結點封裝到bean裡,然後儲存到集合裡.下面以前面兩篇中的users.xml為例,總結下
xml檔案users.xml如下:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <users>
- <userid="001">
- <username>james</username>
- <password>javajsp</password>
- </user>
- <user
- <username>adu</username>
- <password>adu</password>
- </user>
- <userid="003">
- <username>root</username>
- <password>root</password>
- </user><userid="004">
- <username>lishanli</username>
- <password>lishanli</password>
- </user>
- </users>
先設計好bean實體,程式碼如下:
- package org.james.pojo;
- publicclass UserInfo {
- private String username;
- private String password;
- private String id;
- public String getUsername() {
- return username;
- }
- publicvoid setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- publicvoid setPassword(String password) {
- this.password = password;
- }
- public String getId() {
- return id;
- }
- publicvoid setId(String id) {
- this.id = id;
- }
- }
建立DefaultHandler,依然,利用sax解析xml和stack結構相似的技巧.程式碼如下:
- package org.james.sax.util;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Stack;
- import org.james.pojo.UserInfo;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- publicclass AllUserHandler extends DefaultHandler {
- private List<UserInfo> list=new ArrayList<UserInfo>();
- private UserInfo uiobj;
- private Stack<String> sta=new Stack<String>();
- @Override
- publicvoid characters(char[] ch, int start, int length)
- throws SAXException {
- if(!sta.empty()){
- String name=sta.peek();
- if("username".equals(name)){
- uiobj.setUsername(new String(ch,start,length));
- }elseif("password".equals(name)){
- uiobj.setPassword(new String(ch,start,length));
- }
- }
- }
- @Override
- publicvoid endElement(String uri, String localName, String name)
- throws SAXException {
- if("username".equals(name)){
- sta.pop();
- }elseif("password".equals(name)){
- sta.pop();
- }elseif("user".equals(name)){
- list.add(uiobj);
- uiobj=null;
- sta.pop();
- }
- }
- @Override
- publicvoid startElement(String uri, String localName, String name,
- Attributes attributes) throws SAXException {
- if(attributes!=null){
- String id=attributes.getValue("id");
- if(id!=null){
- uiobj=new UserInfo();
- uiobj.setId(id);
- }
- }
- if("user".equals(name)){
- sta.push(name);
- }elseif("username".equals(name)){
- sta.push(name);
- }elseif("password".equals(name)){
- sta.push(name);
- }
- }
- public List<UserInfo> getList() {
- return list;
- }
- }
測試類,沿用UserService.稍作修改.如下:
- package org.james.sax;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.List;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- import org.james.pojo.UserInfo;
- import org.james.sax.util.AllUserHandler;
- import org.james.sax.util.IsExistedUserHandler;
- import org.james.sax.util.ValidateLoginHandler;
- import org.xml.sax.SAXException;
- publicclass UserService {
- privatestatic 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();
- }
- }
- publicboolean isExistedUser(String id){
- IsExistedUserHandler ieuh=new IsExistedUserHandler (id);
- try {
- saxParser.parse(IN, ieuh);
- } catch (SAXException e) {
- System.out.println(e.getMessage());
- returntrue;
- } catch (IOException e) {
- e.printStackTrace();
- }
- returnfalse;
- }
- publicboolean validateLogin(String username,String password){
- ValidateLoginHandler vlh=new ValidateLoginHandler(username,password);
- try {
- saxParser.parse(IN, vlh);
- } catch (SAXException e) {
- System.out.println(e.getMessage());
- returntrue;
- } catch (IOException e) {
- e.printStackTrace();
- }
- returnfalse;
- }
- public List<UserInfo> getAllUsers(){
- AllUserHandler auh=new AllUserHandler();
- try {
- saxParser.parse(IN, auh);
- } catch (SAXException e) {
- System.out.println(e.getMessage());
- } catch (IOException e) {
- e.printStackTrace();
- }
- return auh.getList();
- }
- publicstaticvoid main(String... args){
- UserService us=new UserService();
- //System.out.println(us.isExistedUser("002"));
- //System.out.println(us.validateLogin("root", "ro"));
- List<UserInfo> list=us.getAllUsers();
- for(UserInfo ui : list){
- System.out.println("id: "+ui.getId());
- System.out.println("username: "+ui.getUsername());
- System.out.println("password: "+ui.getPassword());
- System.out.println("---------------------------");
- }
- }
- }
好了,先說到這兒了...呵呵