文件androidAndroid使用PULL解析和生成XML文件

在写这篇文章之前,xxx已经写过了几篇关于改文件android主题的文章,想要了解的朋友可以去翻一下之前的文章

     

      请大家伙多多指教

      邮箱:[email protected]

      使用PULL剖析和生成XML文件:

 在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)Android附带的pull剖析器剖析XML文件。 下面是本例子要剖析的XML文件:

    文件名称:csdn.xml

 这个文件要放在图片的目录下:

  文件和android

    <?xml version="1.0" encoding="UTF-8"?>

    <persons>

    <person id="23">

    <name>李明</name>

    <age>30</age>

    </person>

    <person id="20">

    <name>李向梅</name>

    <age>25</age>

    </person>

    </persons>

    例子定义了一个javabean用于寄存下面剖析出来的xml内容, 这个javabeanPerson,代码请见本页下面备注:

    public class Person {

    private Integer id;

    private String name;

    private Short age;

    public Integer getId() {

    return id;

    }

    public void setId(Integer id) {

    this.id = id;

    }

    public String getName() {

    return name;

    }

    public void setName(String name) {

    this.name = name;

    }

    public Short getAge() {

    return age;

    }

    public void setAge(Short age) {

    this.age = age;

    }

    }

    布局的效果:

    文件和android

    布局代码:

    <RelativeLayout xmlns: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:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >

    <Button 

        android:id="@+id/btn_pull"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="@string/text_pull"/>

 <Button

        android:id="@+id/btn_cpull"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignLeft="@+id/btn_pull"

        android:layout_alignParentRight="true"

        android:layout_below="@+id/btn_pull"

        android:layout_marginTop="28dp"

        android:text="@string/btn_cxml" />

    </RelativeLayout>

    String.xml里面的值代码:

    <?xml version="1.0" encoding="utf-8"?>

    <resources>

    <string name="app_name">AndoridPull剖析和生成Xml文件</string>

    <string name="action_settings">Settings</string>   

    <string name="text_pull">采取pull剖析xml文件</string>

    <string name="btn_cxml">采取pull剖析器生成xml文件</string>

    </resources>

    使用Pull剖析器读取XML文件

    除了可以使用 SAXDOM剖析XML文件,大家也可以使用Android内置的Pull剖析器剖析XML文件。 Pull剖析器的运行方式与 SAX 剖析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发响应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件停止处理。当元素开始剖析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。

    使用Pull剖析器读取itcast.xml的代码在本页下方备注

    Pull剖析器的源码及文档下载网址:http://www.xmlpull.org/

    有些时候,我们须要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull剖析器生成XML文件,这里推荐大家使用Pull剖析器。

    使用Pull剖析器生成一个与itcast.xml文件内容相同的myitcast.xml文件,代码在本页下方备注

    使用代码如下(生成XML文件):

    File xmlFile = new File("myitcast.xml");

    FileOutputStream outStream = new FileOutputStream(xmlFile);

    OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");

    BufferedWriter writer = new BufferedWriter(outStreamWriter);

    writeXML(persons, writer);

    writer.flush();

    writer.close();

    如果只想得到生成的xml字符串内容,可以使用StringWriter

    StringWriter writer = new StringWriter();

    writeXML(persons, writer);

    String content = writer.toString();

    每日一道理
如果说生命是一座庄严的城堡,如果说生命是一株苍茂的大树,如果说生命是一只飞翔的海鸟。那么,信念就是那穹顶的梁柱,就是那深扎的树根,就是那扇动的翅膀。没有信念,生命的动力便荡然无存;没有信念,生命的美丽便杳然西去。(划线处可以换其他词语)

    使用Pull剖析xml文件时的服务层的代码:

  

    package com.example.andorid04pullxml.service;

    import java.io.File;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.InputStream;

    import java.util.ArrayList;

    import java.util.List;

    import org.xmlpull.v1.XmlPullParser;

    import org.xmlpull.v1.XmlPullParserException;

    import org.xmlpull.v1.XmlSerializer;

    import android.os.Environment;

    import android.util.Log;

    import android.util.Xml;

    import com.example.andorid04pullxml.domain.Person;

    public class PullXmlService {

    public Person currentPerson;

    // 声明返回值

    public List<Person> readXML(InputStream is) {

    List<Person> persons = null;

    // 首先利用XML.newPullParser()获取剖析对象

    XmlPullParser xmlPullParser = Xml.newPullParser();

    try {// 剖析文件

    xmlPullParser.setInput(is, "UTF-8");

    // 获取剖析的事件类型

    int eventType = xmlPullParser.getEventType();

    // 判断文件剖析的是不是完毕

    while (eventType != XmlPullParser.END_DOCUMENT) {

    switch (eventType) {

    case XmlPullParser.START_DOCUMENT:

    persons = new ArrayList<Person>();

    break;

    case XmlPullParser.START_TAG:

    String tagName = xmlPullParser.getName();

    Log.v("PullXmlService", tagName + "------");

    // 当剖析的标签是person时

    if ("person".equals(tagName)) {

    // 创建person对象

    currentPerson = new Person();

    // 设置id属性      须要停止转化

    currentPerson.setId(Integer.parseInt(xmlPullParser

    .getAttributeValue(null"id")));

    } else if ("name".equals(tagName)) {

    currentPerson.setName(xmlPullParser.nextText());

    } else if ("age".equals(tagName)) {

    currentPerson

    .setAge(new Short(xmlPullParser.nextText()));

    }

    break;

    case XmlPullParser.END_TAG:

    if ("person".equals(xmlPullParser.getName())

    && currentPerson != null) {

    // 把person对象添加到集合中

    persons.add(currentPerson);

    currentPerson = null;

    }

    break;

    }

    // 下一个标签标识

    eventType = xmlPullParser.next();

    }

    // 关闭流

    is.close();

    } catch (Exception e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    // 返回

    return persons;

    }

    /**

     * 采取pull生成XML文件

     * @param persons

     * @return

     */

    public boolean write(List<Person> persons){

    // 采取pull剖析停止实现

    if(Environment.getExternalStorageState().equals(

    Environment.MEDIA_MOUNTED)){

    File sdCardDir = Environment.getExternalStorageDirectory();

    File file = new File(sdCardDir,"mycsdn.xml");

    XmlSerializer serializer = Xml.newSerializer();

    FileOutputStream fos = null;

    try {

    // 根据文件对象创建一个文件的输出流对象

    fos = new FileOutputStream(file);

    // 设置输出的流及编码

    serializer.setOutput(fos,"UTF-8");

    // 设置文件的开始

    serializer.startDocument("UTF-8",true);

    // persons标签开始

    serializer.startTag(null,"persons");

    for(Person person:persons){

    serializer.startTag(null,"person");

    serializer.attribute("null","id",  person.getId() + "");

    // 设置person标签的子标签 name

    serializer.startTag(null"name");

    serializer.text(person.getName());

    serializer.endTag(null"name");

    // 设置person标签的子标签的age

    serializer.startTag(null"age");

    serializer.text(person.getAge() + "");

    serializer.endTag(null"age");

    // person标签的结束

    serializer.endTag(null"person");

    }

    serializer.endTag(null"persons");

    serializer.endDocument();

    fos.flush();

    fos.close();

    return true;

    } catch (Exception e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    return false;

    }

    }

    最主要的MainActivity中的代码:

    package com.example.andorid04pullxml;

    import java.io.IOException;

    import java.util.List;

    import com.example.andorid04pullxml.domain.Person;

    import com.example.andorid04pullxml.service.PullXmlService;

    import android.os.Bundle;

    import android.app.Activity;

    import android.view.Menu;

    import android.view.View;

    import android.widget.Button;

    import android.widget.Toast;

    public class MainActivity extends Activity {

    //pull剖析器业务对象

    public PullXmlService pullXmlService;

    public Button btn_pull,btn_cpull;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

     // 设置表现的视图

        setContentView(R.layout.activity_main);

        pullXmlService = new PullXmlService();

         // 首先获取按钮组件对象

      btn_pull = (Button) findViewById(R.id.btn_pull);

      btn_cpull = (Button) findViewById(R.id.btn_cpull);

     // 注册事件

     btn_pull.setOnClickListener(new MyOnClickListener());

    

     btn_cpull.setOnClickListener(new MyOnClickListener());

    }

    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.

        getMenuInflater().inflate(R.menu.main, menu);

        return true;

    }

    

    class MyOnClickListener implements View.OnClickListener{

    @Override

    public void onClick(View v) {

        

    int id = v.getId();

    switch (id) {

    case R.id.btn_pull:

    List<Person> persons =  null;

    try {

    persons =     pullXmlService.readXML(getAssets().open("csdn.xml"));

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    if(persons != null){

    Toast.makeText(MainActivity.this, "采取pull剖析xml文件"+persons.get(0).getName()+"--"+persons.get(1).getName(),

    Toast.LENGTH_LONG).show();

    }

    break;

    case R.id.btn_cpull:

    try {

    List<Person>persons1 =     pullXmlService.readXML(getAssets().open("csdn.xml"));

    //从新生成一个xml文件 mycsdn.xml

    boolean flag = pullXmlService.write(persons1);

    if(flag){

    Toast.makeText(MainActivity.this, "采取pull剖析生产xml文件成功",

    Toast.LENGTH_LONG).show();

    }else{

    Toast.makeText(MainActivity.this, "采取pull剖析生产xml文件失败",

    Toast.LENGTH_LONG).show();

    }

    } catch (IOException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    break;

    default:

    break;

    }

    }

    

    }

    

    }

    剖析后的效果图:

    文件和android

    生成后的效果图:

    文件和android

    生成的目录:

    文件和android

 

    生成的xml文件:

    文件和android

文章结束给大家分享下程序员的一些笑话语录: 不会,Intel会维持高利润,也会维持竞争局面,国外的竞争不是打死对方的那种。你看日本有尼康,佳能,索尼,都做相机,大家都过得很滋润。别看一堆厂,其实真正控制的是后面的那几个财团——有些竞争对手,后面其实是一家人。

--------------------------------- 原创文章 By
文件和android
---------------------------------

你可能感兴趣的:(android)