黑马程序员技术交流社区

标题: XML中的SAX解析XML文件的问题BeanListHandler [打印本页]

作者: 狂飙的yellow.co    时间: 2013-6-7 16:02
标题: XML中的SAX解析XML文件的问题BeanListHandler
本帖最后由 狂飙的yellow.co 于 2013-6-7 16:52 编辑

其中将获取的对象取出,却悲剧了,结果是空.....,求解
  1. package XMLDay;


  2. import java.util.ArrayList;
  3. import java.util.Iterator;

  4. import javax.xml.parsers.SAXParser;
  5. import javax.xml.parsers.SAXParserFactory;

  6. import org.xml.sax.Attributes;
  7. import org.xml.sax.SAXException;
  8. import org.xml.sax.XMLReader;
  9. import org.xml.sax.helpers.DefaultHandler;

  10. public class Demo6 {

  11.         /**
  12.          * @param args
  13.          */
  14.         public static void main(String[] args) throws Exception {
  15.                 // TODO Auto-generated method stub

  16.                 //获取工厂类
  17.                 SAXParserFactory factory = SAXParserFactory.newInstance();
  18.                
  19.                 //获取解析器
  20.                 SAXParser sp = factory.newSAXParser();
  21.                
  22.                 //获取XML读取器
  23.                 XMLReader reader = sp.getXMLReader();
  24.                
  25.                
  26.                 //确定数据的handler 处理类
  27.                 BeanListHandle handle = new BeanListHandle();
  28.                 reader.setContentHandler(handle);
  29.                
  30.                 //读取数据
  31.                 reader.parse("src/book.xml");
  32.                
  33.                 //获取读取的XML数据
  34.                 ArrayList<Book> list = handle.getBooks();
  35. //                通过Iterator 迭代的方法,去除数据,我这儿有问题了
  36. //                Iterator<Book> it = list.iterator();
  37. //               
  38. //                while(it.hasNext()){
  39. //                        Book book = it.next(); // 获取Book对象
  40. //                        String name = book.getName();
  41. //                        String author = book.getAuthor();
  42. //                        String price = book.getPrice();
  43. //                        System.out.println(name+"__"+author+"__"+price);
  44. //                }
  45.         }
  46. }

  47. //将获取的类变成对象
  48. class BeanListHandle extends DefaultHandler{
  49.         private String currentName;
  50.         private ArrayList<Book> list = new ArrayList<Book>();
  51.         private Book book;
  52.         @Override
  53.         public void startElement(String uri, String localName, String qName,
  54.                         Attributes attributes) throws SAXException {
  55.                 currentName = qName;
  56.                 if("书".equals(currentName)){
  57.                         this.book = new Book();
  58.                 }
  59.         }
  60.         @Override
  61.         public void characters(char[] ch, int start, int length)
  62.                         throws SAXException {
  63.                 if("书名".equals(currentName)){
  64.                         String name = new String(ch,start,length);
  65.                         book.setName(name);
  66.                 }
  67.                 if("作者".equals(currentName)){
  68.                         String author = new String(ch,start,length);
  69.                         book.setAuthor(author);
  70.                 }
  71.                 if("价格".equals(currentName)){
  72.                         String prise = new String(ch,start,length);
  73.                         book.setPrice(prise);
  74.                 }
  75.         }

  76.         @Override
  77.         public void endElement(String uri, String localName, String qName)
  78.                         throws SAXException {
  79.                 //将定义的标签给删掉
  80.                 if(qName.equals("书")){
  81.                         list.add(book);
  82.                         book = null; //将Book数据初始化
  83.                 }
  84.                 currentName = null;//将当前的数据初始化
  85.         }


  86.         //获取List集合
  87.         //获取数据的Book数据
  88.         public ArrayList<Book> getBooks() {
  89.                 return list;
  90.         }

  91.         
  92.         
  93. }
复制代码

作者: 狂飙的yellow.co    时间: 2013-6-7 16:03
本帖最后由 狂飙的yellow.co 于 2013-6-7 16:07 编辑

我直接打印没有问题..........
XML文档
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <书架>
  3.         <书>
  4.                 <书名>狂飙的yellowcong</书名>
  5.                 <作者>yellowcong</作者>
  6.                 <价格>100</价格>
  7.         </书>
  8.         <书>
  9.                 <书名>狂飙的黑马</书名>
  10.                 <作者>黑马</作者>
  11.                 <价格>100</价格>
  12.         </书>
  13. </书架>
复制代码
Book.java
  1. package XMLDay;

  2. //建立一个书本类,来接受XML中的数据
  3. public class Book {
  4.         private String name;
  5.         private String author;
  6.         private String price;
  7.        
  8.         public String getName() {
  9.                 return name;
  10.         }
  11.         public void setName(String name) {
  12.                 this.name = name;
  13.         }
  14.         public String getAuthor() {
  15.                 return author;
  16.         }
  17.         public void setAuthor(String author) {
  18.                 this.author = author;
  19.         }
  20.         public String getPrice() {
  21.                 return price;
  22.         }
  23.         public void setPrice(String price) {
  24.                 this.price = price;
  25.         }
  26.        
  27. }
复制代码
我直接打印的结果
  1. [XMLDay.Book@fd54d6, XMLDay.Book@1ccb029]
复制代码
问题是,我的提取对象的方法应该没有错啊,为啥答应就是
  1. null__null__null
  2. null__null__null
  3. [XMLDay.Book@fd54d6, XMLDay.Book@1ccb029]
复制代码

作者: 狂飙的yellow.co    时间: 2013-6-7 16:34
用断点调试,心都快碎了//////////////




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2