sax解析xml文件(三)
来源:互联网 发布:巫师3优化指南 编辑:程序博客网 时间:2024/05/01 12:22
在实际开发中,我们经常需要将数据库的一条记录,封装成bean,然后存储到集合里面.
那么,我们也可以利sax 将xml文件中的结点封装到bean里,然后存储到集合里.下面以前面两篇中的users.xml为例,总结下
xml文件users.xml如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <users>
- <user id="001">
- <username>james</username>
- <password>javajsp</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>
先设计好bean实体,代码如下:
- package org.james.pojo;
- public class UserInfo {
- private String username;
- private String password;
- private String id;
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getId() {
- return id;
- }
- public void 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;
- public class AllUserHandler extends DefaultHandler {
- private List<UserInfo> list=new ArrayList<UserInfo>();
- private UserInfo uiobj;
- private Stack<String> sta=new Stack<String>();
- @Override
- public void 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));
- }else if("password".equals(name)){
- uiobj.setPassword(new String(ch,start,length));
- }
- }
- }
- @Override
- public void endElement(String uri, String localName, String name)
- throws SAXException {
- if("username".equals(name)){
- sta.pop();
- }else if("password".equals(name)){
- sta.pop();
- }else if("user".equals(name)){
- list.add(uiobj);
- uiobj=null;
- sta.pop();
- }
- }
- @Override
- public void 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);
- }else if("username".equals(name)){
- sta.push(name);
- }else if("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;
- 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 boolean validateLogin(String username,String password){
- ValidateLoginHandler vlh=new ValidateLoginHandler(username,password);
- try {
- saxParser.parse(IN, vlh);
- } catch (SAXException e) {
- System.out.println(e.getMessage());
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- }
- return false;
- }
- 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();
- }
- public static void 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("---------------------------");
- }
- }
- }
好了,先说到这儿了...呵呵
- sax解析xml文件(三)
- xml文件解析-SAX
- sax解析xml文件
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析xml文件
- SAX解析xml文件
- XML文件解析 sax
- SAX解析xml文件
- SAX解析XML文件
- SAX解析XML文件
- SAX解析XML文件
- sax 解析xml文件
- xml文件Sax解析
- SAX 解析XML 文件
- 跟据XML 动态生成菜单
- c#中的运算符重载
- 学习网站汇总
- dataGridView 如何实现行行的拖动,即行之间相互交换位置
- 最好的发邮件代码
- sax解析xml文件(三)
- wstring的一个小例子
- ORA-12514:TNS:无法解析指定的连接标识符的解决办法
- 存储过程-CREATE PROCEDURE
- desktop.ini 是什么文件?
- Baidu HI使用了QQ TM的代码
- bfd的后端数据表示
- java程序员应具备的基本技能
- SIP开发的资料