加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SAX解析XML文件

发布时间:2020-12-16 05:53:21 所属栏目:百科 来源:网络整理
导读:SAX(Simple API for XML),是指一种接口,或者一个软件包。 SAX:事件驱动型的XML解析方式。顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,会触发一个事件,用户通过在其回调事件中写入处理代码来处理

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

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

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


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

例子程序的xml文件为:

[css] view plain copy
  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. privateStringauthor;
  4. privateStringprice;
  5. publicStringgetName(){
  6. returnname;
  7. }
  8. voidsetName(Stringname){
  9. this.name=name;
  10. }
  11. publicStringgetAuthor(){
  12. returnauthor;
  13. voidsetAuthor(Stringauthor){
  14. this.author=author;
  15. publicStringgetPrice(){
  16. returnprice;
  17. voidsetPrice(Stringprice){
  18. this.price=price;
  19. }


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

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


运行结果为:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读