SAX技术字处理XML文件时并不是一次性把XML文件装入内存,而是一边读一边解析,因此,在解析的过程中会有几个步骤需要注意,在这里用一张图来表示解析的步骤:

在本实例中,定义了一个xml文件,其中有若干个product子标签,如下所示:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<products><product><id>1</id><name>Computer</name><price>2067.25</price></product><product><id>2</id><name>Wifi</name><price>520</price></product><product><id>3</id><name>NotePad</name><price>2400</price></product><product><id>4</id><name>IPad</name><price>3500</price></product><product><id>5</id><name>Mi</name><price>1500</price></product><product><id>6</id><name>MX</name><price>2500</price></product>
</products>

由于文件中有若干个product子标签,所以可以映射成若干个product对象,所以需要定义一个Product类来进行管理,源代码如下:

/** 标签中的内容是若干个product对象,所以为了方便* 在这里定义一个Product类*/
public class Product {public int id;public String name;public float price;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}}

对于xml文件的解析,代码和注释如下:

/** 由于处理XML文件需要一个Handler对象* 操作SAX一般会使用一个DefaultHandler子类来创建Handler对象*/
public class XML_Product extends DefaultHandler{public List<Product> products;public Product product;public StringBuffer buffer=new StringBuffer();public List<Product> getProducts() {return products;}//这是解析过程中最重要的方法,主要作用是处理SAX引擎读取的XML文件中的内容,保存标签中的内容@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);buffer.append(ch,start,length);}//这个方法并不是必须的,如果最后有些其他的工作需要完成,可以在此完成,如释放一些资源@Overridepublic void endDocument() throws SAXException {// TODO Auto-generated method stubsuper.endDocument();}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);if (localName.equals("product")) {products.add(product);}else if (localName.equals("id")) {product.setId(Integer.parseInt(buffer.toString().trim()));buffer.setLength(0);}else if (localName.equals("name")) {product.setName(buffer.toString().trim());buffer.setLength(0);}else if (localName.equals("price")) {product.setPrice(Float.parseFloat(buffer.toString().trim()));buffer.setLength(0);}}@Overridepublic void startDocument() throws SAXException {// TODO Auto-generated method stubsuper.startDocument();products=new ArrayList<Product>();}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);if (localName.equals("product")) {product=new Product();}}}

完成如上的工作之后,我们就可以调用这个方法,实现对xml文件的解析,代码如下:

public class SAX_Activity extends Activity {private Button button;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_sax_);button=(Button)findViewById(R.id.button);textView=(TextView)findViewById(R.id.textview);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtry {InputStream is=getResources().openRawResource(R.raw.test);XML_Product xml_Product=new XML_Product();android.util.Xml.parse(is, Xml.Encoding.UTF_8,xml_Product);List<Product> products=xml_Product.getProducts();String msg="共"+products.size()+"个产品\n";for(Product product:products){msg+="id: "+product.getId()+"  产品名: "+product.getName()+"  价格: "+product.getPrice()+"\n";}textView.setText(msg);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}});}
}

最终得到如图所示的效果图:

Android开发--详解SAX解析XML文件相关推荐

  1. 详解SAX解析XML

    SAX,全称 Simple API for XML,是一种以事件驱动的 XMl API,即XML 简单应用程序接口.解析 XML 元素名称和内容的关键是当 SAX 解析 XML 时,把元素的名称和内容 ...

  2. android xml defaulthandler解析,sax解析xml文件的DefaultHandler处理类

    一千年的时光,我无数次掀起岁月的帷幔,只为和你,在某一个平静如水的日子相遇,然后相识,倾情一生,缱绻一世,好美的散文,好吧,我情愿把这个"你"当作android:),使用sax解析 ...

  3. Android开发详解:第4章《UI 控件》

    Android开发详解:第4章<UI 控件> 控件是Android程序设计的基本组成单位,通过使用控件可以高效地开发Android应用程序.所以熟练掌握控件的使用是合理.有效地进行Andr ...

  4. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  5. php xml 实例教程,php解析xml方法实例详解,解析xml实例详解_PHP教程

    php解析xml方法实例详解,解析xml实例详解 本文以实例形式详细讲述了php解析xml方法.分享给大家供大家参考.具体分析如下: books.xml文件如下: Harry Potter J K. ...

  6. 使用SAX解析XML文件

    关于使用SAX解析XML文件也没什么要说明的,直接上代码吧. 关键如下: public class PersonHandler extends DefaultHandler {private Stri ...

  7. Android学习笔记---android平台中利用,SAX解析xml

    1.SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备. SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺 序解析文档的过程中 ...

  8. Android开发详解之App升级程序一点通

    Android开发详解之App升级程序一点通 结束语 UpdateManager.java import java.io.File; import java.io.FileOutputStream; ...

  9. SAX 解析XML文件:将XML转换成Java对象

    本博客介绍的是解析本地XML文件,解析网络上的XML 本文写得比较简略,实际上项目应用更多的是解析网上的xml资源 使用SAX 处理XML需要一个Handler 对象,一般继承org.xml.sax, ...

最新文章

  1. app获取个人信息是否合法_【关注】如何界定App违法违规收集个人信息?认定方法来了!...
  2. django中html中图片路径怎么写,django css样式,图片路径问题解决方案
  3. php解释命令行的参数
  4. linux用户命令权限管理,Linux命令-用户、权限管理
  5. c++中vecto容器r常使用的相关函数
  6. python对于设计师有什么用-好的IT产品设计师要做到哪些事
  7. NWT失败反省:做视频的多了,汝眼里怎么只有腾讯
  8. 探秘 Linux 之父 Linus Torvalds 的日常,一不小心就撸出两个创世神作!
  9. 百度地图和openlayers融合封装(想法)
  10. 关于极化码Polar code的笔记
  11. 批量修改图幅lisp_【CAD应用技巧】批量自动修改图形文件的程序
  12. C语言知识点--define的替换列表为空是怎么回事?
  13. 韦小宝是咱IT人!理由有8!!
  14. FTP软件FlashFXP下载和使用说明
  15. python 筛选 加字段_如何显示/隐藏显示在筛选中的字段,按选择分组?
  16. Linux 终端 基本指令
  17. pdfbox报错缺少字体问题解决
  18. 04 frameset-iframe【尚硅谷JavaWeb教程】
  19. 使用QT简单实现一个画图工具
  20. 前端JS表格打印和导出

热门文章

  1. iOS实现传递不定长的多个参数
  2. Jfinal 2.1 集成 Guice,实现注解功能, 加入Service接口和实现类,直接晒代码
  3. [Codeforces] Round #320 (Div.2)
  4. Oops 的栈信息分析
  5. 组策略(八)使用使用自定义RealVNC adm模板对域内工作站设置统一标准设置
  6. P1912 [NOI2009]诗人小G
  7. iOS 快速定位到系统设置界面
  8. SpringBoot 实战 (九) | 整合 Mybatis
  9. 动辄数百TB级数据的分析平台 海量并发无压力
  10. PyQt的Layout的比例化分块。