PULL解析XML文件

PULL解析XML文件


常用的XML pull的接口和类:

  • XmlPullParser:该解析器是一个在org.xmlpull.v1中定义的解析功能的接口。

  • XmlSerializer:它是一个接口,定义了XML信息集的序列。

  • XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。

  • XmlPullParserException:抛出单一的XML pull解析器相关的错误。

PULL解析器的运行方式和SAX类似,都是基于事件的模式。

标签说明

标签名说明对应的数字
START_DOCUMENT文档开始标记0
END_DOCUMENT文档结束标记1
START_TAG标签开始标记2
END_TAG标签结束标记3

实例

初始化处理

//从assets中读取xml文件
InputStream is=getResources().getAssets().open("test.xml");
//创建XmlPullParser实例
XmlPullParser parser =Xml.newPullParser();
//设置输入流,并指明字符编码
parser.setInput(is,"utf-8");
//产生第一个事件(即标签对应的Int类型)
int evenType=parser.getEventType();

具体解析

parser.getName()//获取标签名
parser.getText()//获取标签值
parser.getAttributeName(0);//获取第一个属性名
parser.getAttributeValue(0)//获取第一个属性值
evenType=parser.next();//获取下一个标签

 while (evenType!=XmlPullParser.END_DOCUMENT){
                        switch (evenType){
                            //文档开始事件,可以进行数据初始化处理
                            case XmlPullParser.START_DOCUMENT:
                            break;
                            case XmlPullParser.START_TAG:
                                if (parser.getName().equals("person")){
                                     person=new Person();
                                }else if (parser.getName().equals("name")){
                                     evenType=parser.next();
                                    person.setName(parser.getText());
                                }else if (parser.getName().equals("age")){
                                    evenType=parser.next();
                                    person.setAge(parser.getText());
                                }else if (parser.getName().equals("sex")){
                                    evenType=parser.next();
                                    person.setSex(parser.getText());
                                }
                                break;
                            case XmlPullParser.END_TAG:
                                if (parser.getName().equals("person")){
                                    personList.add(person);
                                    person = null;
                                }
                                break;
                        }
                      evenType = parser.next();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                }
                String info="";
                for (Person p:personList){
                    Log.i("personInfo",p.toString());
                    info+=p.toString();

                }

XML生成

 public String serialize(List<Book> books) throws Exception {

        // 由android.util.Xml创建一个XmlSerializer实例
        XmlSerializer serializer = Xml.newSerializer();
        StringWriter writer = new StringWriter();
        // 设置输出方向为writer
        serializer.setOutput(writer);
        serializer.startDocument("UTF-8", true);
        serializer.startTag("", "books");

        for (Book book : books) {
            serializer.startTag("", "book");
            serializer.attribute("", "id", book.getId() + "");

            serializer.startTag("", "name");
            serializer.text(book.getName());
            serializer.endTag("", "name");

            serializer.startTag("", "price");
            serializer.text(book.getPrice() + "");
            serializer.endTag("", "price");

            serializer.endTag("", "book");
        }
        serializer.endTag("", "books");
        serializer.endDocument();

        return writer.toString();
    }
}
String xmlString = parser.serialize(booksList); // 序列化
                    FileOutputStream fos = openFileOutput("books.xml",
                            Context.MODE_PRIVATE);
                    fos.write(xmlString.getBytes("UTF-8"));
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值