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

Posted lovejobs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
        }
    

        
}

 

以上是关于xml文件解析(使用解析器)的主要内容,如果未能解决你的问题,请参考以下文章

DOM解析xml文件

使用非utf-8编码在Python中解析XML

xml解析

解析XML文件之使用SAM解析器

GroovyXml 反序列化 ( 使用 XmlParser 解析 Xml 文件 | 获取 Xml 文件中的节点和属性 | 获取 Xml 文件中的节点属性 )

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration