SAX解析XML文件

前端之家收集整理的这篇文章主要介绍了SAX解析XML文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_403_1@

SAX(Simple API for XML),是指一种接口,或者一个软件包。@H_502_4@@H_403_1@

SAX:事件驱动型的XML解析方式。顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问,且是只读的。@H_502_4@@H_403_1@

由于移动设备的内存资源有限,SAX的顺序读取方式更适合移动开发。@H_502_4@@H_403_1@

SAX解析xml文件,将解析出来的结果放到一个bean中,再将所有的baen放到list列表中@H_403_1@

例子程序的xml文件为:@H_403_1@

[css] view plain copy@H_502_4@
@H_502_4@
  1. <?xmlversion=@H_502_4@"1.0"@H_502_4@encoding=@H_502_4@"UTF-8"@H_502_4@?>@H_502_4@@H_502_4@
  2. <书架>@H_502_4@
  3. <书>@H_502_4@
  4. <书名>海的女儿</书名>@H_502_4@
  5. <作者>安徒生</作者>@H_502_4@
  6. <售价>50.0@H_502_4@元</售价>@H_502_4@@H_502_4@
  7. </书>@H_502_4@
  8. <书>@H_502_4@
  9. <书名>卖火柴的小女孩</书名>@H_502_4@
  10. <作者>安徒生</作者>@H_502_4@
  11. <售价>28.0@H_502_4@元</售价>@H_502_4@@H_502_4@
  12. </书>@H_502_4@
  13. </书架>@H_502_4@


需要一个book类,存放书的具体信息(书名,作者,售价)为:@H_403_1@

[java] copy@H_502_4@
@H_502_4@
    package@H_502_4@com.flower.parsexml;@H_502_4@@H_502_4@
  1. @H_502_4@
  2. @H_502_4@
  3. public@H_502_4@@H_502_4@class@H_502_4@Book{@H_502_4@@H_502_4@
  4. private@H_502_4@Stringname;@H_502_4@@H_502_4@
  5. private@H_502_4@Stringauthor;@H_502_4@@H_502_4@
  6. private@H_502_4@Stringprice;@H_502_4@@H_502_4@
  7. public@H_502_4@StringgetName(){@H_502_4@@H_502_4@
  8. return@H_502_4@name;@H_502_4@@H_502_4@
  9. }@H_502_4@
  10. void@H_502_4@setName(Stringname){@H_502_4@@H_502_4@
  11. this@H_502_4@.name=name;@H_502_4@@H_502_4@
  12. }@H_502_4@
  13. public@H_502_4@StringgetAuthor(){@H_502_4@@H_502_4@
  14. return@H_502_4@author;@H_502_4@@H_502_4@
  15. void@H_502_4@setAuthor(Stringauthor){@H_502_4@@H_502_4@
  16. this@H_502_4@.author=author;@H_502_4@@H_502_4@
  17. public@H_502_4@StringgetPrice(){@H_502_4@@H_502_4@
  18. return@H_502_4@price;@H_502_4@@H_502_4@
  19. void@H_502_4@setPrice(Stringprice){@H_502_4@@H_502_4@
  20. this@H_502_4@.price=price;@H_502_4@@H_502_4@
  21. }@H_502_4@


下面开始解析,代码如下:@H_403_1@

copy@H_502_4@
@H_502_4@
    import@H_502_4@java.io.IOException;@H_502_4@@H_502_4@
  1. import@H_502_4@java.util.ArrayList;@H_502_4@@H_502_4@
  2. import@H_502_4@javax.xml.parsers.ParserConfigurationException;@H_502_4@@H_502_4@
  3. import@H_502_4@javax.xml.parsers.SAXParser;@H_502_4@@H_502_4@
  4. import@H_502_4@javax.xml.parsers.SAXParserFactory;@H_502_4@@H_502_4@
  5. import@H_502_4@org.xml.sax.Attributes;@H_502_4@@H_502_4@
  6. import@H_502_4@org.xml.sax.SAXException;@H_502_4@@H_502_4@
  7. import@H_502_4@org.xml.sax.XMLReader;@H_502_4@@H_502_4@
  8. import@H_502_4@org.xml.sax.helpers.DefaultHandler;@H_502_4@@H_502_4@
  9. class@H_502_4@SAXparse{@H_502_4@@H_502_4@
  10. @SuppressWarnings@H_502_4@(@H_502_4@"unchecked"@H_502_4@)@H_502_4@@H_502_4@
  11. static@H_502_4@@H_502_4@void@H_502_4@main(String[]args)@H_502_4@throws@H_502_4@ParserConfigurationException,@H_502_4@@H_502_4@
  12. SAXException,IOException{@H_502_4@
  13. //创建解析工厂@H_502_4@@H_502_4@@H_502_4@
  14. SAXParserFactoryfactory=SAXParserFactory.newInstance();@H_502_4@
  15. //创建解析器@H_502_4@@H_502_4@@H_502_4@
  16. SAXParserparser=factory.newSAXParser();@H_502_4@
  17. //得到读取器@H_502_4@@H_502_4@@H_502_4@
  18. XMLReaderreader=parser.getXMLReader();@H_502_4@
  19. //设置内容处理器@H_502_4@@H_502_4@@H_502_4@
  20. BeanListHandlerhandler=new@H_502_4@BeanListHandler();@H_502_4@@H_502_4@
  21. reader.setContentHandler(handler);@H_502_4@
  22. @H_355_404@//读取xml文档@H_502_4@@H_502_4@@H_502_4@
  23. reader.parse("src/books.xml"@H_502_4@);@H_502_4@@H_502_4@
  24. ArrayListlist=handler.getBooks();@H_502_4@
  25. Bookbook;@H_502_4@
  26. for@H_502_4@(@H_502_4@int@H_502_4@i=@H_502_4@0@H_502_4@;i<list.size();i++){@H_502_4@@H_502_4@
  27. book=new@H_502_4@Book();@H_502_4@@H_502_4@
  28. book=(Book)list.get(i);@H_502_4@
  29. System.out.println(book.getName()+book.getAuthor()+book.getPrice());@H_502_4@
  30. class@H_502_4@BeanListHandler@H_502_4@extends@H_502_4@DefaultHandler{@H_502_4@@H_502_4@
  31. //将读取的内容存放到一个book对象中,存放到list集合中@H_502_4@@H_502_4@@H_502_4@
  32. ArrayList<Book>list=new@H_502_4@ArrayList<Book>();@H_502_4@@H_502_4@
  33. private@H_502_4@StringcurrentTag;@H_502_4@@H_502_4@
  34. private@H_502_4@Bookbook;@H_502_4@@H_502_4@
  35. @Override@H_502_4@@H_502_4@@H_502_4@
  36. void@H_502_4@startElement(Stringuri,StringlocalName,StringqName,@H_502_4@@H_502_4@
  37. Attributesattributes)throws@H_502_4@SAXException{@H_502_4@@H_502_4@
  38. currentTag=qName;@H_502_4@
  39. if@H_502_4@(@H_502_4@"书"@H_502_4@.equals(currentTag)){@H_502_4@@H_502_4@
  40. book=new@H_502_4@Book();@H_502_4@@H_502_4@
  41. @Override@H_502_4@@H_502_4@@H_502_4@
  42. void@H_502_4@characters(@H_502_4@char@H_502_4@[]ch,@H_502_4@int@H_502_4@start,153); font-weight:bold; background-color:inherit">int@H_502_4@length)@H_502_4@@H_502_4@
  43. throws@H_502_4@SAXException{@H_502_4@@H_502_4@
  44. if@H_502_4@(@H_502_4@"书名"@H_502_4@.equals(currentTag)){@H_502_4@@H_502_4@
  45. Stringname=new@H_502_4@String(ch,start,length);@H_502_4@@H_502_4@
  46. book.setName(name);@H_502_4@
  47. if@H_502_4@(@H_502_4@"作者"@H_502_4@.equals(currentTag)){@H_502_4@@H_502_4@
  48. Stringauthor= book.setAuthor(author);@H_502_4@
  49. if@H_502_4@(@H_502_4@"售价"@H_502_4@.equals(currentTag)){@H_502_4@@H_502_4@
  50. Stringprice= book.setPrice(price);@H_502_4@
  51. void@H_502_4@endElement(Stringuri,StringqName)@H_502_4@@H_502_4@
  52. if@H_502_4@(@H_502_4@"书"@H_502_4@.equals(qName)){@H_502_4@@H_502_4@
  53. list.add(book);@H_502_4@
  54. null@H_502_4@;@H_502_4@@H_502_4@
  55. currentTag=public@H_502_4@ArrayList<Book>getBooks(){@H_502_4@@H_502_4@
  56. return@H_502_4@list;@H_502_4@@H_502_4@
  57. }@H_502_4@


@H_403_1@

运行结果为:@H_502_4@@H_403_1@

copy@H_502_4@
@H_502_4@
    海的女儿安徒生@H_502_4@50.0@H_502_4@元@H_502_4@@H_502_4@
  1. 卖火柴的小女孩安徒生28.0@H_502_4@元@H_502_4@@H_502_4@

猜你在找的XML相关文章