加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml文件的序列化

发布时间:2020-12-16 05:53:50 所属栏目:百科 来源:网络整理
导读:xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较简单的,咱不做介绍了,这里给大家讲一下xml的序列化生成和解析。不废话

xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较简单的,咱不做介绍了,这里给大家讲一下xml的序列化生成和解析。不废话了,先上图,看怎么生成图中的xml数据。


首先,我把Person的实体类给大家贴出来,这个非常简单,我就不过多解释了,直接看代码就行了。

Person.java,代码如下:

[java] view plain copy
  1. packagenet.loonggg.test;
  2. publicclassPerson{
  3. privateintid;
  4. privateStringage;
  5. privateStringname;
  6. privateStringsex;
  7. privateStringaddress;
  8. intgetId(){
  9. returnid;
  10. }
  11. voidsetId(intid){
  12. this.id=id;
  13. publicStringgetAge(){
  14. returnage;
  15. voidsetAge(Stringage){
  16. this.age=age;
  17. publicStringgetName(){
  18. returnname;
  19. voidsetName(Stringname){
  20. this.name=name;
  21. publicStringgetSex(){
  22. returnsex;
  23. voidsetSex(Stringsex){
  24. this.sex=sex;
  25. publicStringgetAddress(){
  26. returnaddress;
  27. voidsetAddress(Stringaddress){
  28. this.address=address;
  29. @Override
  30. publicStringtoString(){
  31. return"Person[id="+id+",age="+age+",name="+name
  32. +",sex="+sex+",address="+address+"]";
  33. }

其次:生成xml文件的方法如下:

    /**
  1. *生成xml
  2. */
  3. voidcreateXml(){
  4. XmlSerializerserializer=Xml.newSerializer();//xml文件生成器
  5. Filefile=newFile(Environment.getExternalStorageDirectory(),
  6. "person.xml");
  7. FileOutputStreamfos=null;
  8. try{
  9. fos=newFileOutputStream(file);
  10. serializer.setOutput(fos,"utf-8");//为xml生成器设置输出流和字符编码
  11. serializer.startDocument("utf-8",true);//开始文档,参数分别为字符编码和是否保持独立
  12. serializer.startTag(null,"persons");//开始标签,参数分别为:命名空间和标签名
  13. for(Personperson:list){
  14. serializer.startTag("person");
  15. serializer.attribute("id",person.getId()+"");
  16. "name");//开始标签
  17. serializer.text(person.getName());//文本内容
  18. serializer.endTag(//结束标签
  19. "sex");
  20. serializer.text(person.getSex());
  21. "age");
  22. serializer.text(person.getAge());
  23. "address");
  24. serializer.text(person.getAddress());
  25. "person");
  26. }
  27. serializer.endTag(//结束标签
  28. serializer.endDocument();//结束xml文档
  29. Toast.makeText(getApplicationContext(),"生成成功!",Toast.LENGTH_SHORT);
  30. }catch(Exceptione){
  31. "生成失败!",108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> e.printStackTrace();
  32. }finally{
  33. fos.close();
  34. catch(IOExceptione){
  35. e.printStackTrace();
  36. }

然后是解析xml文件的方法:

    *解析xml文件
  1. privateList<Person>pullXml(){
  2. FileInputStreamfis=newFileInputStream(file);
  3. List<Person>persons=null;
  4. Personperson= XmlPullParserparser=Xml.newPullParser();//获取xml解析器
  5. parser.setInput(fis,0); background-color:inherit">//参数分别为输入流和字符编码
  6. inttype=parser.getEventType();
  7. while(type!=XmlPullParser.END_DOCUMENT){//如果事件不等于文档结束事件就继续循环
  8. switch(type){
  9. caseXmlPullParser.START_TAG:
  10. if("persons".equals(parser.getName())){
  11. persons=newArrayList<Person>();
  12. elseif("person".equals(parser.getName())){
  13. person=newPerson();
  14. Stringid=parser.getAttributeValue(0);
  15. person.setId(Integer.parseInt(id));
  16. if("name".equals(parser.getName())){
  17. person.setName(parser.nextText());
  18. if("sex".equals(parser.getName())){
  19. person.setSex(parser.nextText());
  20. if("address".equals(parser.getName())){
  21. person.setAddress(parser.nextText());
  22. if("age".equals(parser.getName())){
  23. person.setAge(parser.nextText());
  24. break;
  25. caseXmlPullParser.END_TAG:
  26. if("person".equals(parser.getName())){
  27. persons.add(person);
  28. type=parser.next();//继续下一个事件
  29. returnpersons;
  30. catch(NumberFormatExceptione){
  31. catch(FileNotFoundExceptione){
  32. catch(XmlPullParserExceptione){
  33. return }

再次是MainActivity里调用的部分代码:

    classMainActivityextendsActivity{
  1. privateButtonbtn_create=privateButtonbtn_pull=privateTextViewtv_show;
  2. privateList<Person>list= @Override
  3. protectedvoidonCreate(BundlesavedInstanceState){
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. btn_create=(Button)findViewById(R.id.createXml);
  7. btn_pull=(Button)findViewById(R.id.pullXml);
  8. tv_show=(TextView)findViewById(R.id.tvShow);
  9. list=for(inti=0;i<5;i++){
  10. person.setAge(i+20+"");
  11. person.setId(i);
  12. person.setName("loonggg"+i);
  13. person.setSex("男");
  14. person.setAddress("中南海"+i+1+"大街");
  15. list.add(person);
  16. btn_create.setOnClickListener(newView.OnClickListener(){
  17. voidonClick(Viewv){
  18. createXml();
  19. });
  20. btn_pull.setOnClickListener( tv_show.setText(pullXml().toString());
  21. }

最后是布局文件,代码如下;

[html]
    <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  1. xmlns:tools="http://schemas.android.com/tools"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical">
  5. Button
  6. android:id="@+id/createXml"
  7. android:layout_width="fill_parent"
  8. android:layout_height="wrap_content"
  9. android:text="生成xml"/>
  10. android:id="@+id/pullXml"
  11. android:text="解析xml"TextView
  12. android:id="@+id/tvShow"
  13. android:layout_height="wrap_content"/>
  14. </LinearLayout>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读