xml文件是非常常用的,在android中json和xml是非常常用的两种封装数据的形式,从服务器中获取数据也经常是这两种形式的,所以学会生成和解析xml和json是非常有用的,json相对来说是比较简单的,咱不做介绍了,这里给大家讲一下xml的序列化生成和解析。不废话了,先上图,看怎么生成图中的xml数据。
首先,我把Person的实体类给大家贴出来,这个非常简单,我就不过多解释了,直接看代码就行了。
Person.java,代码如下:
- packagenet.loonggg.test;
-
- publicclassPerson{
- privateintid;
- privateStringage;
- privateStringname;
- privateStringsex;
- privateStringaddress;
-
- intgetId(){
- returnid;
- }
- voidsetId(intid){
- this.id=id;
- publicStringgetAge(){
- returnage;
- voidsetAge(Stringage){
- this.age=age;
- publicStringgetName(){
- returnname;
- voidsetName(Stringname){
- this.name=name;
- publicStringgetSex(){
- returnsex;
- voidsetSex(Stringsex){
- this.sex=sex;
- publicStringgetAddress(){
- returnaddress;
- voidsetAddress(Stringaddress){
- this.address=address;
- @Override
- publicStringtoString(){
- return"Person[id="+id+",age="+age+",name="+name
- +",sex="+sex+",address="+address+"]";
- }
其次:生成xml文件的方法如下:
-
- */
- voidcreateXml(){
- XmlSerializerserializer=Xml.newSerializer();
- Filefile=newFile(Environment.getExternalStorageDirectory(),
- "person.xml");
- FileOutputStreamfos=null;
- try{
- fos=newFileOutputStream(file);
- serializer.setOutput(fos,"utf-8");
- serializer.startDocument("utf-8",true);
- serializer.startTag(null,"persons");
- for(Personperson:list){
- serializer.startTag("person");
- serializer.attribute("id",person.getId()+"");
- "name");
- serializer.text(person.getName());
- serializer.endTag(//结束标签
- "sex");
- serializer.text(person.getSex());
- "age");
- serializer.text(person.getAge());
- "address");
- serializer.text(person.getAddress());
- "person");
- }
- serializer.endTag(//结束标签
- serializer.endDocument();
- Toast.makeText(getApplicationContext(),"生成成功!",Toast.LENGTH_SHORT);
- }catch(Exceptione){
- "生成失败!",108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> e.printStackTrace();
- }finally{
- fos.close();
- catch(IOExceptione){
- e.printStackTrace();
- }
然后是解析xml文件的方法:
*解析xml文件
- privateList<Person>pullXml(){
- FileInputStreamfis=newFileInputStream(file);
- List<Person>persons=null;
- Personperson= XmlPullParserparser=Xml.newPullParser();
- parser.setInput(fis,0); background-color:inherit">//参数分别为输入流和字符编码
- inttype=parser.getEventType();
- while(type!=XmlPullParser.END_DOCUMENT){
- switch(type){
- caseXmlPullParser.START_TAG:
- if("persons".equals(parser.getName())){
- persons=newArrayList<Person>();
- elseif("person".equals(parser.getName())){
- person=newPerson();
- Stringid=parser.getAttributeValue(0);
- person.setId(Integer.parseInt(id));
- if("name".equals(parser.getName())){
- person.setName(parser.nextText());
- if("sex".equals(parser.getName())){
- person.setSex(parser.nextText());
- if("address".equals(parser.getName())){
- person.setAddress(parser.nextText());
- if("age".equals(parser.getName())){
- person.setAge(parser.nextText());
- break;
- caseXmlPullParser.END_TAG:
- if("person".equals(parser.getName())){
- persons.add(person);
- type=parser.next();
- returnpersons;
- catch(NumberFormatExceptione){
- catch(FileNotFoundExceptione){
- catch(XmlPullParserExceptione){
- return }
再次是MainActivity里调用的部分代码:
classMainActivityextendsActivity{
- privateButtonbtn_create=privateButtonbtn_pull=privateTextViewtv_show;
- privateList<Person>list= @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- btn_create=(Button)findViewById(R.id.createXml);
- btn_pull=(Button)findViewById(R.id.pullXml);
- tv_show=(TextView)findViewById(R.id.tvShow);
- list=for(inti=0;i<5;i++){
- person.setAge(i+20+"");
- person.setId(i);
- person.setName("loonggg"+i);
- person.setSex("男");
- person.setAddress("中南海"+i+1+"大街");
- list.add(person);
- btn_create.setOnClickListener(newView.OnClickListener(){
- voidonClick(Viewv){
- createXml();
- });
- btn_pull.setOnClickListener( tv_show.setText(pullXml().toString());
- }
最后是布局文件,代码如下;
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- Button
- android:id="@+id/createXml"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="生成xml"/>
- android:id="@+id/pullXml"
- android:text="解析xml"TextView
- android:id="@+id/tvShow"
- android:layout_height="wrap_content"/>
- </LinearLayout>
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|