使用SAX方式解析XML文件

package com.pingyijinren.test;

import android.util.Log;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * Created by Administrator on 2016/5/19 0019.
 */
public class ContentHandler extends DefaultHandler {
    private String nodeName;
    private StringBuilder id;
    private StringBuilder name;
    private StringBuilder version;

    @Override
    public void startDocument() throws SAXException{
        id=new StringBuilder();
        name=new StringBuilder();
        version=new StringBuilder();
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{
        nodeName=localName;
    }

    @Override
    public void characters(char[] ch,int start,int length) throws SAXException{
        if(nodeName.equals("id")){
            id.append(ch,start,length);
        }
        else if(nodeName.equals("name")){
            name.append(ch,start,length);
        }
        else if(nodeName.equals("version")){
            version.append(ch,start,length);
        }
    }

    @Override
    public void endElement(String uri,String localName,String qName) throws SAXException{
        if(localName.equals("app")){
            Log.d("MainActivity","id is "+id.toString().trim());
            Log.d("MainActivity","name is "+name.toString().trim());
            Log.d("MainActivity","version is "+version.toString().trim());

            id.setLength(0);
            name.setLength(0);
            version.setLength(0);
        }
    }

    @Override
    public void endDocument() throws SAXException{}
}
package com.pingyijinren.test;

import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import java.io.BufferedReader;
import java.io.EOFException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.xml.parsers.SAXParserFactory;

public class MainActivity extends AppCompatActivity{
    private Button button;
    private TextView textView;
    private static final int SHOW_RESPONSE=0;
    private Handler handler=new Handler(){
        public void handleMessage(Message message){
            switch(message.what){
                case SHOW_RESPONSE:
                    String response=(String)message.obj;
                    textView.setText(response);
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button=(Button)findViewById(R.id.button);
        textView=(TextView)findViewById(R.id.textView);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                sendRequestWithHttpURLConnection();
            }
        });
    }

    private void sendRequestWithHttpURLConnection(){
        new Thread(new Runnable(){
            @Override
            public void run(){
                try{
                    HttpClient httpClient = new DefaultHttpClient();
                    HttpGet httpGet=new HttpGet("http://172.29.209.1/get_data.xml");
                    HttpResponse httpResponse=httpClient.execute(httpGet);
                    if(httpResponse.getStatusLine().getStatusCode()==200){
                        HttpEntity httpEntity=httpResponse.getEntity();
                        String response= EntityUtils.toString(httpEntity,"utf-8");

                        Log.d("MainActivity",response);

                        parseXMLWithSAX(response);
                    }
                }
                catch(Exception e){
                    e.printStackTrace();
                }

            }
        }).start();
    }

    private void parseXMLWithSAX(String xmlData){
        try{
            SAXParserFactory factory=SAXParserFactory.newInstance();
            XMLReader xmlReader=factory.newSAXParser().getXMLReader();
            ContentHandler handler=new ContentHandler();
            xmlReader.setContentHandler(handler);
            xmlReader.parse(new InputSource(new StringReader(xmlData)));
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}
时间: 2024-08-04 18:49:43

使用SAX方式解析XML文件的相关文章

SAX方式解析xml文件查看天气

1.SAX方式解析xml文件的步骤: ①创建解析器工厂对象 ②使用当前配置的工厂参数创建SAXParser对象 ③解析xml文件 ④利用DefaultHandler创建事件驱动者 2.对于标签对象进行引用怎么办? ①定义当前解析的标签:private String tagName=null; ②在startElement()方法中赋值tagName:this.tagName=qName; ③在endElement()方法中将tagName赋值为空:this.tagName=null; ④在cha

通过Sax方式解析xml文件

说明:此案例使用的是通过Dom方式解析xml文件这篇文章里的City类和china.xml文件. 1. 因为xml文件有两种格式,一是上面那篇文章里的那种元素节点里只包含属性节点,另一种就是元素节点里包含元素节点和文本节点,于是在china.xml中添加如下代码,以实现两种方式的解析: <city> <cityname>杭州</cityname> <pyName>zhejiang</pyName> <quName>浙江</quN

SAX方式解析XML文件的方法分析

SAX(Simple API for XML)SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束.元素(element)开始与结束.文档(document)结束等地方时通知事件处理方法,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束.SAX解析方式适用于大型文档,因为他的解析是逐行进行不用像DOM中那样为所有节点创建对象,这样效率大大提高,所以虽然它不是W3C标准,但它却得到了广泛认可. 这是一个需要解析的XML文件: <?xml versio

java中用SAX方式解析xml文件

SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准.SAX是一种轻量型的方法,不像DOM解析时,把XML文档全部载入内存中,在PC上操作,Dom还有优势,但在手机中端上则无优势,因为手机内存和硬件都比不上PC强.使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器.SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理. 在SAX接口中,事件源是org.

通过Pull方式解析xml文件

说明:此案例使用的是通过Sax方式解析xml文件这篇文章里的布局文件.City类和china.xml文件(此文件内包含两种格式),所以只需要完成MainActivity和PullXml就行了,在于展示如何使用Pull方式解析xml文件. 1. PullXml类的主要代码如下: <span style="font-size:14px;">public class PullXml { public List<City> pullXml() { List<Cit

Android系列之网络(四)----SAX方式解析XML数据

?[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4044170.html 联系方式:[email protected] [系列]Android系列之网络:(持续更新) Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) Android系列之网络(二)----HTTP请求头与响应头 Androi

QT开发(四十三)——SAX方式解析XML

QT开发(四十三)--SAX方式解析XML 一.SAX简介 SAX是Simple API for XML的简写,是一种解析XML文件的替代方法,不是由W3C官方所提出的标准,是一种事件驱动的XML API,接近于底层,速度较快,但不便于随机访问任意节点. SAX解析的核心是事件处理机制,具有占用内存少,效率高等特点. SAX采用事件机制的方式来解析XML文档.使用SAX解析器对XML文档进行解析时,SAX解析器根本不创建任何对象,只是在遇到XML文档的各种标签如文档开始.元素开始.文本.元素结束

XML —— SAX方式解析XML

1. SAX 方式解析 XML 原理 SAX 的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束.元素(element) 开始与结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同 样的扫描,直至文档结束. 优点:相对于DOM方式消耗资源比较少,适合大文件解析: 缺点:只能读取不能修改:开发复杂: 2. SAX 方式解析 XML 示例 扫描文档 import javax.xml.parsers.SAXParser; import javax.xml

XML引入,DOM 方式解析XML 原理,SAX 方式解析XML

XML 简介 Xml(eXtensible Markup Language) 即可扩展标记语言.提供了一套跨平台.跨网络.跨程序的语言的数据描述方式,使用XML 可以方便地实现数据交换.系统配置.内容管理等常见功能. 元素VS 节点 节点包括元素节点.属性节点.文本节点:元素一定是节点,但是节点不一定是元素: <?xml version="1.0" encoding="UTF-8"?> <emp> <empName empNo=&quo