源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android开发之XML文件解析的使用

  • 时间:2021-06-03 12:07 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android开发之XML文件解析的使用
  [b]前言 [/b]   本文主要介绍在Android中怎样来解析XML文件。主要采用的是SAX机制,SAX全称为Simple API for XML,它既是一种接口,也是一个软件包。作为接口,SAX是事件驱动型XML解析的一个标准接口。XML文件解析一般有2种方法,DOM和SAX。其中DOM需要先将xml文档全部读入到电脑内存中,当文档内容太大时,该方法并不适用。SAX就比较好的解决了该问题,它是逐行解析的,可以随时中断。但是SAX的操作比较复杂。因此,这2种方法各有优缺点,看具体应用情况。在前面的文章Qt学习之路_12(简易数据管理系统)中使用的是Qt中的DOM方法。   [b]实验说明[/b]   大多数SAX实现都会产生类似下面的事件:   在文档的开始和结束处触发文档处理事件;在文档内每一XML元素结束解析的前后触发元素事件;任何元数据通常豆油单独的事件交付;在处理文档的DTD或者Schema时产生DTD 或者Schema事件;产生错误事件用来通知主机应用程序解析错误。   [b]SAX模型示意图如下所示:[/b]   [img]http://files.jb51.net/file_images/article/201304/2013042609400512.png[/img]     如果要用SAX来解析xml文档,则需要一个类来继承android系统提供的ContentHandler类。但是如果继承ContentHandler这个类, 即使你不使用这个类提供的所有方法,你也必须实现其内部的所有方法(一般情况下没有使用的方法可以直接用空方法代替),但是这样开发起来不是很方便。因此我们可以改为继承DefaultHandler这个类,这样的话我们只需要实现程序中所需要的方法即可,其它的方法这个类内部其实已经用空方法代替了。 ContentHandler接口的方法有以下几种: void startDocument();//文档解析开始时执行 void endDocument();//文档解析结束时执行 void startElement(String uri, String localName, String qName, Attributes atts);//标签开始解析时执行 void endElement(String uri, String localName, String qName, Attributes atts);//标签解析结束时执行 void characters(char[] ch, int start, int length );//解析标签属性时执行   android中使用SAX来解析xml文件,需先建立一个SAX工厂,即SAXParserFactory对象,还需建立一个XMLReader对象,该类绑定ContentHandler子类,且与xml源文件结合在一起。即其处理过程为创建事件处理程序,创建SAX解析器,键事件处理程序分配给解析器,对文档进行解析,将每个事件发送给处理程序。    判断String类型的值是否相等采用的是String类的equal方法。    本实验是解析一段xml代码,然后在上面每个解析函数中打印一些内容。主要是学会怎么使用SAX模型来来创建解析器,怎样使用ContentHandler子类的函数来进行解析。   [b]实验主要部分代码:[/b] [i][b]Mainactivity.java:[/b][/i]
[u]复制代码[/u] 代码如下:
package com.example.xml;
import java.io.StringReader; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity {     private Button start  = null;     private TextView display = null;     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         start = (Button)findViewById(R.id.start);         start.setOnClickListener(new StartOnClickListener());     }     public class StartOnClickListener implements OnClickListener{         public void onClick(View v) {             // TODO Auto-generated method stub             //注意2点,第1:字符串中如果要换行写,则应该用引号和加号来相加得到,不能直接换行写             //第2点:如果字符串中有字符,则用括号里面的符合(\")代替引号。             //我这里用的xml文件直接为该程序layout的布局xml文件 //            String result_str = //            "<RelativeLayout " + //              "  xmlns:tools=\"http://schemas.android.com/tools\" " + //              "  android:layout_width=\"match_parent\" " + //              "  android:layout_height=\"match_parent\" > " + //            //             "   <Button  " + //               "     android:id=\"@+id/start\"    " + //                 "   android:layout_width=\"fill_parent\"    " + //                  "  android:layout_height=\"wrap_content\"    " + //                 "   android:layout_alignParentBottom=\"true\"    " + //                  "  android:text=\"Start XML Parse\"    "    + //                "    /> " + //              "  <TextView " + //                "    android:id=\"@+id/display\" " + //               "     android:layout_width=\"fill_parent\"    " + //                "    android:layout_height=\"fill_parent\"    " + //                "    android:gravity=\"center\"    " + //                "     android:layout_alignParentLeft=\"true\"    "    + //                "     android:layout_above=\"@+id/start\"    "    + //                "     android:text=\"The XML Parse Example!!\"    " + //                "    />    " + //        "    </RelativeLayout>";             String result_str =                      "   <Button  " +                "     id=\"@+id/start\"    " +                  "   layoutwidth=\"fillparent\"    " +                   "  layoutheight=\"wrapcontent\"    " +                  "   layoutalignParentBottom=\"true\"    " +                   "  text=\"Start XML Parse\"    "    +                 "    </Button> " ;                         System.out.println(result_str);             try{                 //创建SAX工厂                 SAXParserFactory factory = SAXParserFactory.newInstance();                 XMLReader reader = factory.newSAXParser().getXMLReader();                 reader.setContentHandler(new MyContentHandler());                 reader.parse(new InputSource(new StringReader(result_str)));             }             catch(Exception e) {                 e.printStackTrace();             }         }     }     @Override     public boolean onCreateOptionsMenu(Menu menu) {         getMenuInflater().inflate(R.menu.activity_main, menu);         return true;     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部