pull解析xml
发布时间:2020-12-16 05:43:17  所属栏目:百科  来源:网络整理 
            导读:Pull解析XML: 和sax类似,也是基于事件驱动的解析xml,但是比sax使用更方便简单;android也自己封装了pull的解析器XmlResourceParser; 常用的XML pull的接口和类: XmlPullParser:该解析器是一个在org.xmlpull.v1中定义的解析功能的接口。 XmlSerializer:
                
                
                
            | Pull解析XML:  常用的XML pull的接口和类: XmlPullParser:该解析器是一个在org.xmlpull.v1中定义的解析功能的接口。 XmlSerializer:它是一个接口,定义了XML信息集的序列。 XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。 XmlPullParserException:抛出单一的XML pull解析器相关的错误。 PULL解析器的运行方式和SAX类似,都是基于事件的模式。 读取到xml的声明返回 START_DOCUMENT; 结束返回 END_DOCUMENT ; 开始标签返回 START_TAG; 结束标签返回 END_TAG; 文本返回 TEXT。 Pull解析方法:
    1. next方法进入一个解析事件(开始文档、开始标签、结束文档和结束标签等),通过next返回的事件以不是文档结束标志循环
    2. 处于一个元素里面的时候,可以使用
            getAttributeValue(String namespace,String name) 获取属性值,
            也可以getAttributeValue(int index) 第几个属性的值
    3. 获取节点的值  String nextText()例子: public class PullParserUtils
{
    public static List<Person> parserXmlByPull(InputStream inputStream) throws Exception
    {
        List<Person> persons = null;
        Person person = null;
        // 创建XmlPullParserFactory解析工厂
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        // 通过XmlPullParserFactory工厂类实例化一个XmlPullParser解析类
        XmlPullParser parser = factory.newPullParser();
        // 根据指定的编码来解析xml文档
        parser.setInput(inputStream,"utf-8");
        // 得到当前的事件类型
        int eventType = parser.getEventType();
        // 只要没有解析到xml的文档结束,就一直解析
        while(eventType != XmlPullParser.END_DOCUMENT)
        {
            switch (eventType)
            {
                // 解析到文档开始的时候
                case XmlPullParser.START_DOCUMENT:
                     persons = new ArrayList<Person>();
                break;
                // 解析到xml标签的时候
                case XmlPullParser.START_TAG:
                     if("person".equals(parser.getName()))
                     {
                         person = new Person();
                         // 得到person元素的第一个属性,也就是ID
                         person.setId(Integer.parseInt(parser.getAttributeValue(0)));
                     }
                     else if("name".equals(parser.getName()))
                     {
                         // 如果是name元素,则通过nextText()方法得到元素的值
                         person.setName(parser.nextText());
                     }
                     else if("age".equals(parser.getName()))
                     {
                         person.setAge(Integer.parseInt(parser.nextText()));
                     }
                break;
                // 解析到xml标签结束的时候
                case XmlPullParser.END_TAG:
                     if("person".equals(parser.getName()))
                     {
                         persons.add(person);
                         person = null;
                     }
                break;
            }
            // 通过next()方法触发下一个事件
            eventType = parser.next();
        }
        return persons;
    }
}(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! | 
相关内容
- 如何设置flash builder 4.5语言为英文
- 配置文件generatorConfig.xml
- MT 203 Multiple General Financial Institution Transfer多
- Oracle数据库
- vue slot 在子组件中显示父组件传递的模板
- 如何在$.ajax中覆盖jQuery对XMLHttpRequest的使用?
- cocos2dx + lua 中实现 lua的MVC
- reactjs – React-reveal仅在滚动停止时才起作用 – chrome
- ios – 在Xcode 4.3/4.3.1中,任何使“验证项目设置”警告消
- xml数据处理--ElementTree模块使用
