Android--使用pull解析XML和在sd卡中生成XML文件

代码:

主函数:

ublic class MainActivity extends AppCompatActivity {
    String xmlString = "<apps>\n" +
                           "\t<app>\n" +
                           "\t\t<id>1</id>\n" +
                           "\t\t<name>google map</name>\n" +
                           "\t\t<version>1.0</version>\n" +
                           "\t</app>\n" +
                           "\t\n" +
                           "\t<app>\n" +
                           "\t\t<id>2</id>\n" +
                           "\t\t<name>google play</name>\n" +
                           "\t\t<version>2.0</version>\n" +
                           "\t</app>\n" +
                           "\t\n" +
                           "\t<app>\n" +
                           "\t\t<id>1</id>\n" +
                           "\t\t<name>chrome</name>\n" +
                           "\t\t<version>3.0</version>\n" +
                           "\t</app>\n" +
                           "\n" +
                           "</apps>";
    String TAG = "parse_XML";
    OutputStream outputStream = null;
    List<App> all = new ArrayList<>();



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //解析XML文件
        parseXMLWithPull(xmlString);


        //添加数据源

        for (int i = 0; i < 3; i++) {
            App app = new App();
            app.setId(i);
            app.setName("app" + i);
            app.setVersion(i);
            all.add(app);
        }

        //生成XML文件
        try {
            //路径
//            outputStream = new FileOutputStream(new File(Environment.getExternalStorageDirectory().toString()+File.separator+""));
            String baseUrl  = Environment.getExternalStorageDirectory().toString();
            String path = baseUrl + File.separator + "apps.xml";
            File file = new File( path);
            outputStream = new FileOutputStream(file);

            MyXMLPullUtils myXMLPullUtils = new MyXMLPullUtils(outputStream, all);
            myXMLPullUtils.save();


        } catch (Exception e) {
            e.printStackTrace();
        }



    }

    private void parseXMLWithPull(String xmlString) {

        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            //解析器
            XmlPullParser xmlPullParser = factory.newPullParser();
            //开始读取xml文件
            StringReader stringReader = new StringReader(xmlString);
            xmlPullParser.setInput(stringReader);
            //获取事件类型
            int eventType = xmlPullParser.getEventType();
            //
            String id = "";
            String name = "";
            String version = "";
            //如果没有结束,就一直执行,DOCUMENT指的是文档的结束
            while(eventType != XmlPullParser.END_DOCUMENT){
                //获取每一个节点的名称(每一对尖括号就是一对节点)
                String nodeName = xmlPullParser.getName();
                switch (eventType) {
                    //起始标签
                    case XmlPullParser.START_TAG:
                        if("id".equals(nodeName)){
                            id = xmlPullParser.nextText();
                        }else if("name".equals(nodeName)){
                            name = xmlPullParser.nextText();
                        }else if("version".equals(nodeName)){
                            version = xmlPullParser.nextText();
                        }
                        break;
                    //结束标签
                    case XmlPullParser.END_TAG:
                        if("app".equals(nodeName)){
                            Log.i(TAG,"id = "+ id);
                            Log.i(TAG,"name = "+ name);
                            Log.i(TAG,"version = "+ version);
                        }
                        break;
                    default:
                        break;

                }
                eventType = xmlPullParser.next();
            }


        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

App:

public class App {

    private int id;
    private String name;
    private float version;

    public App() {

    }

    public App(int id, String name, float version) {
        this.id = id;
        this.name = name;
        this.version = version;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getVersion() {
        return version;
    }

    public void setVersion(float version) {
        this.version = version;
    }
}

MyXMLPullUtils:

public class MyXMLPullUtils {

    OutputStream outputStream = null;

    //用集合保存节点
    private List<App> all = null;

    public MyXMLPullUtils(OutputStream outputStream, List<App> all) {
        this.outputStream = outputStream;
        this.all = all;
    }

    public void save() throws Exception {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        //序列化
        XmlSerializer xs = factory.newSerializer();
        xs.setOutput(this.outputStream,"utf-8");
        //转化为迭代器
        Iterator<App> iterator = this.all.iterator();

        xs.startDocument(null,true);
        xs.startTag(null,"apps");
        //循环遍历
        while(iterator.hasNext()){
            App app = iterator.next();

            xs.startTag(null,"app");

            xs.startTag(null,"id");
            xs.text(app.getId()+"");
            xs.endTag(null,"id");

            xs.startTag(null,"name");
            xs.text(app.getName());
            xs.endTag(null,"name");

            xs.startTag(null,"version");
            xs.text(app.getVersion()+"");
            xs.endTag(null,"version");

            xs.endTag(null,"app");

        }

        xs.endTag(null,"apps");
        xs.endDocument();
        xs.flush();

        outputStream.flush();
        outputStream.close();

    }
}

猜你喜欢

转载自blog.csdn.net/ykx_1448488568/article/details/81735350
今日推荐