xml文件解析(使用解析器)

一.Xml解析,解析xml并封装到list中的javabean中

OM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理

1.获取xml解析器

        XmlPullParser xpp = Xml.newPullParser();

2.设置解析器参数

    xpp.setInput(in, "utf-8");//in为输入流

3.获取事件类型

int type = xpp.getEventType();

4.不断向下解析,一行一行解析

        while(type != XmlPullParser.END_DOCUMENT){
                switch(type){

                case XmlPullParser.START_TAG://解析开始标签
                    //具体判断是哪个开始标签
                    if("weather".equals(xpp.getName())){
                        weatherlist = new ArrayList<Channel>();
                    }else if("channel".equals(xpp.getName())){
                        ch = new Channel();
                        String id = xpp.getAttributeValue(0);
                        ch.setId(id);
                    }else if("city".equals(xpp.getName())){
                        String city = xpp.nextText();
                        ch.setCity(city);
                    }else if("temp".equals(xpp.getName())){
                        String temp = xpp.nextText();
                        ch.setTemp(temp);
                    }else if("wind".equals(xpp.getName())){
                        String wind = xpp.nextText();
                        ch.setWind(wind);
                    }else if("pm2.5".equals(xpp.getName())){
                        String pm250 = xpp.nextText();
                        ch.setPm250(pm250);
                    }
                    break;
                case XmlPullParser.END_TAG://解析结束标签
                    //判断要解析的结束标签
                    if("channel".equals(xpp.getName())){
                        //把ch对象添加到集合
                        weatherlist.add(ch);
                    }
                    break;        

                }
                type = xpp.next();
            }

5.对应的要解析的文件:

<?xml version="1.0" encoding="utf-8"?>
<weather>
    <channel id="1">
        <city>北京</city>
        <temp>16℃</temp>
        <wind>4</wind>
        <pm2.5>300</pm2.5>
    </channel>

    <channel id="2">
        <city>上海</city>
        <temp>20℃</temp>
        <wind>5</wind>
        <pm2.5>200</pm2.5>
    </channel>

    <channel id="3">
        <city>广州</city>
        <temp>25℃</temp>
        <wind>3</wind>
        <pm2.5>100</pm2.5>
    </channel>

    <channel id="4">
        <city>深圳</city>
        <temp>27℃</temp>
        <wind>6</wind>
        <pm2.5>150</pm2.5>
    </channel>

</weather>

6.对应的JAVABEAN代码

package com.hui.xmlparse;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

public class ParserXml {

     public static List<Channel> weatherlist = null;
    public static Channel ch = null;

    public static List <Channel> weatherParser(InputStream in) throws Exception {
            //获取xml解析器
            XmlPullParser xpp = Xml.newPullParser();
            //设置解析器参数
            xpp.setInput(in, "utf-8");
            //获取事件类型
            int type = xpp.getEventType();
            //不断向下解析
            while(type != XmlPullParser.END_DOCUMENT){
                switch(type){

                case XmlPullParser.START_TAG://解析开始标签
                    //具体判断是哪个开始标签
                    if("weather".equals(xpp.getName())){
                        weatherlist = new ArrayList<Channel>();
                    }else if("channel".equals(xpp.getName())){
                        ch = new Channel();
                        String id = xpp.getAttributeValue(0);
                        ch.setId(id);
                    }else if("city".equals(xpp.getName())){
                        String city = xpp.nextText();
                        ch.setCity(city);
                    }else if("temp".equals(xpp.getName())){
                        String temp = xpp.nextText();
                        ch.setTemp(temp);
                    }else if("wind".equals(xpp.getName())){
                        String wind = xpp.nextText();
                        ch.setWind(wind);
                    }else if("pm2.5".equals(xpp.getName())){
                        String pm250 = xpp.nextText();
                        ch.setPm250(pm250);
                    }
                    break;
                case XmlPullParser.END_TAG://解析结束标签
                    //判断要解析的结束标签
                    if("channel".equals(xpp.getName())){
                        //把ch对象添加到集合
                        weatherlist.add(ch);
                    }
                    break;        

                }
                type = xpp.next();
            }

            return weatherlist;
        }

}
时间: 2025-01-31 15:05:30

xml文件解析(使用解析器)的相关文章

对xml文件的简单解析

package com.eprobj.demo; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document; import org.w3c.dom.Ele

利用freemarker生成word,word另存为xml文件的标签解析

http://wenku.baidu.com/link?url=YxTZWVP3ssO-e_Br3LIZVq2xOQnqaSz8gLPiRUDN8NIR_wX2-Z25OqwbVn5kXqGiOFYUMBsaMlWcbHld565N5ENMBTrUOp_-rsrsjIMBlgi 1 public class WordUtil { 2 private Configuration configuration=null; 3 4 public WordUtil () { 5 configuration

Java之Pull方式生成xml文件和解析xml文件

Pull XML解析器早已经被google集成到android sdk当中,它是google官方推荐的解析器. 如果我们要在Java桌面.J2ME等当中使用Pull方式生成xml文件和解析xml文件,需要用到kxml2: KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是http://kxml.org/ 普通XML PULL解析器的官网是http://xmlpull.org/ 实验开始: 在Eclipse中新建一个java项目,其中新建一个libs文件夹,拷贝从网上下载的k

【Java编程】SAX XML Parser解析、生成XML文件

1.优缺点 优点: SAX 从根本上解决了 DOM 在解析 XML 文档时产生的占用大量资源的问题.其实现是通过类似于流解析的技术,通读整个 XML 文档树,通过事件处理器来响应程序员对于 XML 数据解析的需求.由于其不需要将整个 XML 文档读入内存当中,它对系统资源的节省是十分显而易见的,它在一些需要处理大型 XML 文档以及性能要求较高的场合有起了十分重要的作用.支持 XPath 查询的 SAX 使得开发人员更加灵活,处理起 XML 来更加的得心应手. 缺点: 但是同时,其仍然有一些不足

XML文件解析【安卓7】——SAX解析

XML文件解析 XML解析:XML技术是Android平台的应用基础,  Android提供了多种解析XML的方式:SAX解析.DOM解析.PULL解析 SAX解析 SAX --Simple  API  forXML  (XML简单的API) --解析速度快.占用内存少 --提供一组简单的API用于解析XML文件 --SAX在解析XML文件前,先指定一个解析事件处理器(Handler),SAX会对XML文档进行简单的顺序扫描,当扫描到[文档(Document)的开始和结束.元素(Element)

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

1.步骤: ①创建文档解析器的工厂对象 ②得到文档解析器对象 ③获取输入流对象 ④通过解析器的parse方法解析is对象 转换成Document对象 ⑤返回的是文档的根节点 ⑥判断是否有孩子节点进行获取子节点转换成元素节点得到属性节点 ⑦得到具体的某个属性节点 2.解析元素节点.属性节点.文本节点: 3.界面搭建 界面搭建的相关代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

解析Xml文件的三种方式及其特点

解析Xml文件的三种方式 1.Sax解析(simple api  for xml) 使用流式处理的方式,它并不记录所读内容的相关信息.它是一种以事件为驱动的XML API,解析速度快,占用内存少.使用回调函数来实现. 1 class MyDefaultHander extends DefaultHandler{ 2 private List<Student> list; 3 private Student student; 4 5 @Override 6 public void startDo

java dom4j 解析XML文件 简易教程

XML 来自: W3School XML 被设计用来传输和存储数据. HTML 被设计用来显示数据. 什么是 XML? eXtensible Markup Language XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被预定义.您需要自行定义标签. XML 被设计为具有自我描述性. XML 是 W3C 的推荐标准 XML 与 HTML 的主要差异 XML 不

安卓SAX解析XML文件

XML文件常用的解析方式有DOM解析,SAX解析. 一.Sax SAX(simpleAPIforXML)是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一边扫描一边解析.而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂.SAX解析XML文档采用事件驱动模式.什么是事件驱动模式?它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理.基于事件驱动的处理模式主要是基于事件源和事件

Android对XML文件解析

HTTP网络传输中的数据组织方式有三种方式: 1.HTML方式 2.XML方式 3.JSON方式 XML的结构解析如下: 1.节点 2.元素 3.属性和属性值 由于XML的扩展性强,致使它需要有稳定的基础规则来支持扩展,该语法规则是: 1.开始和结束标签匹配 2.嵌套标签不能互相嵌套 3.区分大小写 Android中,解析Xml数据的三种方式: 1.DOM(org.w3c.dom) "文档对象模型"方式,解析完的Xml将生成一个树状结构的对象. 2.SAX(org.xml.sax) S