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. @H_403_55@ <书名>海的女儿</书名>
  5. <作者>安徒生</作者>
  6. @H_403_55@ <售价>50.0元</售价>
  7. </书>
  8. @H_403_55@ <书>
  9. <书名>卖火柴的小女孩</书名>
  10. @H_403_55@ <作者>安徒生</作者>
  11. <售价>28.0元</售价>
  12. @H_403_55@ </书>
  13. </书架>


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

[java] copy
    packagecom.flower.parsexml; @H_403_55@
  1. @H_403_55@ publicclassBook{
  2. privateStringname;
  3. privateStringauthor;
  4. privateStringprice;
  5. publicStringgetName(){
  6. returnname;
  7. @H_403_55@ }
  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. @H_403_55@ @SuppressWarnings("unchecked")
  11. staticvoidmain(String[]args)throwsParserConfigurationException,
  12. @H_403_55@ SAXException,IOException{
  13. //创建解析工厂
  14. @H_403_55@ SAXParserFactoryfactory=SAXParserFactory.newInstance();
  15. //创建解析器
  16. @H_403_55@ SAXParserparser=factory.newSAXParser();
  17. //得到读取器
  18. @H_403_55@ XMLReaderreader=parser.getXMLReader();
  19. //设置内容处理器
  20. @H_403_55@ BeanListHandlerhandler=newBeanListHandler();
  21. reader.setContentHandler(handler);
  22. @H_403_55@ @H_561_404@//读取xml文档
  23. reader.parse("src/books.xml");
  24. @H_403_55@ ArrayListlist=handler.getBooks();
  25. Bookbook;
  26. for(inti=0;i<list.size();i++){
  27. book=newBook();
  28. @H_403_55@ 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. @H_403_55@ currentTag=qName;
  39. if("书".equals(currentTag)){
  40. @H_403_55@ book=newBook();
  41. @Override
  42. voidcharacters(char[]ch,intstart,153); font-weight:bold; background-color:inherit">intlength)
  43. throwsSAXException{
  44. if("书名".equals(currentTag)){
  45. @H_403_55@ Stringname=newString(ch,start,length);
  46. book.setName(name);
  47. if("作者".equals(currentTag)){
  48. @H_403_55@ Stringauthor= book.setAuthor(author);
  49. if("售价".equals(currentTag)){
  50. @H_403_55@ 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 @H_403_55@ 卖火柴的小女孩安徒生28.0
原文链接:https://www.f2er.com/xml/295366.html

猜你在找的XML相关文章