SAX解析XML文件

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

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

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

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


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

例子程序的xml文件为:

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


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

[java] copy
    packagecom.flower.parsexml;
  1. publicclassBook{
  2. privateStringname;
  3. @H_301_152@privateStringauthor;
  4. privateStringprice;
  5. @H_301_152@publicStringgetName(){
  6. returnname;
  7. }
  8. voidsetName(Stringname){
  9. @H_301_152@this.name=name;
  10. }
  11. @H_301_152@publicStringgetAuthor(){
  12. returnauthor;
  13. @H_301_152@voidsetAuthor(Stringauthor){ @H_301_152@this.author=author;
  14. publicStringgetPrice(){
  15. returnprice;
  16. @H_301_152@voidsetPrice(Stringprice){ @H_301_152@this.price=price;
  17. }


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

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


运行结果为:

copy
    海的女儿安徒生50.0
  1. 卖火柴的小女孩安徒生28.0
原文链接:https://www.f2er.com/xml/295366.html

猜你在找的XML相关文章