PULL解析XML

来源:互联网 发布:mac制作黑苹果安装u盘 编辑:程序博客网 时间:2024/06/01 10:41

PULL与SAX相似,都不能更改XML信息。

1、两种解析器:第一种只适合Android解析,第二种只适合JAVA。但是第二种在Android也是可用的。所以一般pull解析通用第二种。
`

//第一种解析器XmlPullParser xmlPullParser = Xml.newPullParser();//第二种解析器 XmlPullParserFactory  factory = XmlPullParserFactory.newInstance();XmlPullParser  xmlPullParser = factory.newPullParser();

`

2,带有文本内容的XML有两种读取方式:

第一种:定位到元素节点,利用xmlPullParser.nextText()获取文本节点值,即元素的文本内容。这种方式,只有第一种解析器才正确,第二种解析器的end_TAG解析不全。所以适用于Android。第二种:type = xmlPullParser.next();定位到文本节点之后利用xmlPullParser.getText()获取文本内容。这种方式。两种解析器解析都正确,所以一般pull解析使用第二种读取文本内容。

综上1、2两点。pull解析是使用第二种解析器,第二种文本读取方式。

3、Android中保存:XmlSerializer serializer = Xml.newSerializer();
利用serializer.startDocument()、endtDocument()、startTag()、text()、endTag()。编写XML内容

4、安卓代码如下:
`

import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.provider.ContactsContract.CommonDataKinds.Event;import android.util.Xml;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity{    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView tv = (TextView) this.findViewById(R.id.tv);        //pull解析        try        {            InputStream input = this.getClass().getClassLoader().getResourceAsStream("students.xml");            //第一种解析器            XmlPullParser xmlPullParser = Xml.newPullParser();              //解析文件名            xmlPullParser.setInput(input, "UTF-8");            //开始解析文件            int type = xmlPullParser.getEventType();            while(type != XmlPullParser.END_DOCUMENT)            {                //第一种:定位到元素节点,利用xmlPullParser.nextText()获取文本节点值,即元素的文本内容                //这种方式,只有第一种解析器才正确,第二种解析器的end_TAG解析不全                //key只能是int,byte,char,short                switch (type)                {                case XmlPullParser.START_DOCUMENT:                    String encoding = xmlPullParser.getInputEncoding();                    tv.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");                    break;                case XmlPullParser.START_TAG:                    if("students".equals(xmlPullParser.getName())){                        tv.append("<students>\n");                    }                    if("student".equals(xmlPullParser.getName())){                        tv.append("     <student sn = "+xmlPullParser.getAttributeValue(0)+">\n");                    }                    if("name".equals(xmlPullParser.getName())){                        tv.append("          <name>"+xmlPullParser.nextText());//nextText()获取当前节点下的一个文本内容                    }                    if("age".equals(xmlPullParser.getName())){                        tv.append("          <age>"+xmlPullParser.nextText());                    }                    break;                case XmlPullParser.END_TAG:                    if("student".equals(xmlPullParser.getName())){                        tv.append("     </student>\n");                    }                    if("name".equals(xmlPullParser.getName())){                        tv.append("</name>\n");                    }                    if("age".equals(xmlPullParser.getName())){                        tv.append("</age>\n");                    }                    if("students".equals(xmlPullParser.getName())){                        tv.append("</students>\n");                    }                    break;                case XmlPullParser.END_DOCUMENT:                    break;                default:                    break;                }                //绝对不能缺少                type = xmlPullParser.next();            }            /*              //第一种解析器            XmlPullParser xmlPullParser = Xml.newPullParser();            //第二种解析器 //          XmlPullParserFactory  factory = XmlPullParserFactory.newInstance();//          XmlPullParser  xmlPullParser = factory.newPullParser();            //解析文件名            xmlPullParser.setInput(input, "UTF-8");            //开始解析文件            int type = xmlPullParser.getEventType();            while(type != XmlPullParser.END_DOCUMENT)            {                //第二种:type = xmlPullParser.next();定位到文本节点之后利用xmlPullParser.getText()获取文本内容                //这种方式。两种解析器解析都正确                switch (type)                {                case XmlPullParser.START_DOCUMENT:                    tv.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");                    break;                case XmlPullParser.START_TAG:                    if("students".equals(xmlPullParser.getName())){                        tv.append("<students>\n");                    }                    if("student".equals(xmlPullParser.getName())){                        tv.append("     <student sn = "+xmlPullParser.getAttributeValue(0)+">\n");                    }                    if("name".equals(xmlPullParser.getName())){                        type = xmlPullParser.next();//定位到文本节点上                        tv.append("          <name>"+xmlPullParser.getText());//getText()获取当前文本节点的内容                    }                    if("age".equals(xmlPullParser.getName())){                        type = xmlPullParser.next();                        tv.append("          <age>"+xmlPullParser.getText());                    }                    break;                case XmlPullParser.END_TAG:                    if("student".equals(xmlPullParser.getName())){                        tv.append("     </student>\n");                    }                    if("name".equals(xmlPullParser.getName())){                        tv.append("</name>\n");                    }                    if("age".equals(xmlPullParser.getName())){                        tv.append("</age>\n");                    }                    if("students".equals(xmlPullParser.getName())){                        tv.append("</students>\n");                    }                    break;                case XmlPullParser.END_DOCUMENT:                    tv.append("</students>");                    break;                default:                    break;                }                //绝对不能缺少                type = xmlPullParser.next();            }            */        }        catch (XmlPullParserException e)        {            // TODO Auto-generated catch block            e.printStackTrace();        }        catch (IOException e)        {            // TODO Auto-generated catch block            e.printStackTrace();        }        //保存文件,不能修改文件的。        try        {            FileOutputStream out = openFileOutput("new_students.xml",                     Context.MODE_PRIVATE);            XmlSerializer serializer = Xml.newSerializer();            serializer.setOutput(out, "UTF-8");            serializer.startDocument("UTF-8", true);            serializer.startTag(null, "student");            serializer.attribute(null, "sn","03");            serializer.startTag(null, "name");            serializer.text("麻子");            serializer.endTag(null, "name");            serializer.startTag(null, "age");            serializer.text("22");            serializer.endTag(null, "age");            serializer.endTag(null, "student");            serializer.endDocument();            out.flush();            out.close();            Toast.makeText(getApplicationContext(),"save successful", 1)            .show();        }        catch (IllegalArgumentException e)        {            // TODO Auto-generated catch block            e.printStackTrace();        }        catch (IllegalStateException e)        {            // TODO Auto-generated catch block            e.printStackTrace();        }        catch (IOException e)        {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}


5、students.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?><students>      <student sn="01">               <name>张三</name>             <age>18</age>       </student>        <student sn="02">               <name>李四</name>             <age>28</age>       </student></students>

`

0 0
原创粉丝点击