• android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件


    简介

    XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换。

    将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件。

    1、下载工具 xstream

      下载最新版本地址: https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/

      下载完成后 把jar包导入到自己的android项目中 

    2、 常用的方法:

    (1)fromXML()方法 返回值是 Object

    xStream.fromXML( File file) ;

    xStream.fromXML( InputStream in) ;

    xStream.fromXML( Reader reader ) ;

    xStream.fromXML( String xml ) ;

    xStream.fromXML( URL url ) ;

    xStream.fromXML( File file , Object root ) ;

    xStream.fromXML( InputStream in , Object root ) ;

    xStream.fromXML( Reader reader , Object root ) ;

    xStream.fromXML( String xml , Object root ) ;

    xStream.fromXML( URL url , Object root ) ;  

    (2)toXML()方法

    xStream.toXML( Object object ) ;   //返回值String

    xStream.toXML( Object object , OutputStream out ); //返回值void

    xStream.toXML( Object object , Writer writer );  //返回值void

     (3) 设置别名

    根节点设置别名:参数一:别名 ; 参数二:当前的类名

    xstream.alias( "blog" , Product.class ) ;

    属性节点设置别名 : 参数一:别名 ;  参数二:当前的类名 ; 参数三:原来的节点名

    xstream.aliasField( "blogName" , Person.class , "pName" ) ; 

    (4)XML字符串格式化

    /**
         * 格式化XML字符串
         * @param xml
         * @return
         */
        public static String formatXml(String xml){
            try{
                Transformer serializer= SAXTransformerFactory.newInstance().newTransformer();
                serializer.setOutputProperty(OutputKeys.INDENT, "yes");
                serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
                Source xmlSource=new SAXSource(new InputSource(new ByteArrayInputStream(xml.getBytes())));
                StreamResult res =  new StreamResult(new ByteArrayOutputStream());            
                serializer.transform(xmlSource, res);
                return new String(((ByteArrayOutputStream)res.getOutputStream()).toByteArray());
            }catch(Exception e){         
                return xml;
            }
        }

    3、asset 文件夹 下的 aa.xml 文件

    <?xml version="1.0" encoding="UTF-8"?>
    <product>   
    <name>jike</name> 
    <age>30</age>
    </product>

    4、实体

    package com.android10;
    
    
    public class Product {
    
        private String name ;
        
        private String age  ;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    }

    5、实现代码

    package com.android10;
    import java.io.IOException;
    import java.io.InputStream;
    import android.app.Activity;
    import android.os.Bundle;
    import com.thoughtworks.xstream.XStream;
    
    public class MainActivity extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState)  {
            super.onCreate(savedInstanceState);
            setContentView( R.layout.activity_main );
    
            //得到资源中的数据流  
            String fileName = "aa.xml" ; //文件名字   
            try {
                InputStream in = getResources().getAssets().open( fileName ) ;
                XStream xstream = new XStream() ;       
                xstream.alias( "product" , Product.class );  //这里的product一定要和 xml文件中的 product 保持一直,否则会报错的.     
                Product product = (Product) xstream.fromXML( in );
    
                System.out.println("sss " + product.getName() + product.getAge()  );
            } catch (IOException e) {
                e.printStackTrace();
            }   
        }
    }

    6、运行结果
       sss jike30

    7、项目下载地址

       http://download.csdn.net/detail/yanzi2015/8797641

  • 相关阅读:
    “Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED”
    【问底】夏俊:深入站点服务端技术(一)——站点并发的问题
    java反射调用方法
    linux 文件操作系统调用
    64位win7中使用vs2013为python3.4安装pycrypto-2.6.1插件报Unable to find vcvarsall.bat异常解决方式
    ViewPager+RadioGroup实现标题栏切换,Fragment切换
    Android View系统解析(下)
    高速学会Mac上托管代码到github(具体解释)
    linux程序设计——多线程(第十二章)
    使用工作流更新子记录
  • 原文地址:https://www.cnblogs.com/zhaoyanjun/p/4570290.html
Copyright © 2020-2023  润新知