Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1682|回复: 0

在android中使用SAX解析XML文件

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2011-8-24 20:40:37 | 显示全部楼层 |阅读模式
    创建一个java类MyContentHandler.java继承DefaultHandler.java(ContentHandler.java的实现类)读取XML中的数据:
    1. package com.zhangjie.xml;
    2. import org.xml.sax.Attributes;
    3. import org.xml.sax.SAXException;
    4. import org.xml.sax.helpers.DefaultHandler;
    5. public class MyContentHandler extends DefaultHandler {
    6. String hisname,address,money,sex,status;
    7. String tagName;
    8. @Override
    9. public void characters(char[] ch, int start, int length)
    10.    throws SAXException {
    11.   if(tagName.equals("name"))
    12.    hisname = new String(ch,start,length);
    13.   else if(tagName.equals("sex"))
    14.    sex = new String(ch,start,length);
    15.   else if(tagName.equals("status"))
    16.    status = new String(ch,start,length);
    17.   else if(tagName.equals("address"))
    18.    address = new String(ch,start,length);
    19.   else if (tagName.equals("money"))
    20.     money = new String(ch,start,length);
    21. }
    22. @Override
    23. public void endDocument() throws SAXException {
    24.   System.out.println("-------------end----------");
    25. }
    26. @Override
    27. public void endElement(String uri, String localName, String qName)
    28.    throws SAXException {
    29.   //在worker标签解析完之后,会打印出所有得到的数据
    30.   tagName = "";
    31.   if(localName.equals("worker")){
    32.    this.printout();
    33.   }
    34. }
    35. @Override
    36. public void startDocument() throws SAXException {
    37.   System.out.println("-----------begin----------");
    38. }
    39. @Override
    40. public void startElement(String uri, String localName, String qName,
    41.    Attributes attr) throws SAXException {
    42.   tagName = localName;
    43.   if(localName.equals("worker")){
    44.    //获取标签的全部属性
    45.    for(int i = 0 ;i < attr.getLength();i++){
    46.     System.out.println(attr.getLocalName(i)+"="+attr.getValue(i));
    47.    }
    48.   }
    49. }
    50. private void printout(){
    51.   System.out.print("name:");
    52.   System.out.println(hisname);
    53.   System.out.print("sex:");
    54.   System.out.println(sex);
    55.   System.out.print("status:");
    56.   System.out.println(status);
    57.   System.out.print("address:");
    58.   System.out.println(address);
    59.   System.out.print("money:");
    60.   System.out.println(money);
    61.   System.out.println();
    62. }
    63. }
    复制代码

    在main.xml中创建一个按钮:
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3.     android:orientation="vertical"
    4.     android:layout_width="fill_parent"
    5.     android:layout_height="fill_parent"
    6.     >
    7. <Button
    8.     android:id="@+id/jiexi"
    9.     android:layout_width="fill_parent"
    10.     android:layout_height="wrap_content"
    11.     android:text="解析xml文件"
    12. />
    13. </LinearLayout>
    复制代码

    并在XMLActivity.java中设置其监听器,此例为先从网络上下载xml文件,再读取,打印到LogCat中:
    1. package com.zhangjie.xml;
    2. import java.io.StringReader;
    3. import javax.xml.parsers.SAXParserFactory;
    4. import org.xml.sax.InputSource;
    5. import org.xml.sax.XMLReader;
    6. import com.zhangjie.utils.HttpDownloader;
    7. import android.app.Activity;
    8. import android.os.Bundle;
    9. import android.view.View;
    10. import android.view.View.OnClickListener;
    11. import android.widget.Button;
    12. public class XmlActivity extends Activity {
    13.     /** Called when the activity is first created. */
    14.     @Override
    15.     public void onCreate(Bundle savedInstanceState) {
    16.         super.onCreate(savedInstanceState);
    17.         setContentView(R.layout.main);
    18.         Button button = (Button)findViewById(R.id.jiexi);
    19.         button.setOnClickListener(new XMLButtonListener());
    20.     }
    21.    
    22.     class XMLButtonListener implements OnClickListener{
    23.   @Override
    24.   public void onClick(View v) {
    25.    HttpDownloader hd = new HttpDownloader();
    26.    String resultStr = hd.download("http://www.javaxxz.com/new.xml");
    27.    System.out.println(resultStr);
    28.    try{
    29.     //创建一个SAXParserFactory
    30.     SAXParserFactory factory = SAXParserFactory.newInstance();
    31.     XMLReader reader = factory.newSAXParser().getXMLReader();
    32.     //为XMLReader设置内容处理器
    33.     reader.setContentHandler(new MyContentHandler());
    34.     reader.parse(new InputSource(new StringReader(resultStr)));
    35.    }catch(Exception e){
    36.     e.printStackTrace();
    37.    }
    38.    
    39.   }
    40.     }
    41. }
    复制代码

    注:有关如何下载文本文件的例子,请参考帖子:http://www.javaxxz.com/read.php?tid=1212
    http://www.javaxxz.com/new.xml 网络上的xml文件如下:



    当单击“解析xml文件”按钮后在LoGCat中打印的信息:

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    该用户从未签到

    发表于 2011-9-2 18:33:00 | 显示全部楼层
    支持。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2012-3-31 01:14:28 | 显示全部楼层
    支持下~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-1-12 00:56 , Processed in 0.372006 second(s), 47 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表