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
- XML解析Pull解析
- XML解析---PULL解析
- XML的pull解析
- Pull解析XML文件
- Pull详解解析xml
- Pull解析Xml方式
- Android Pull解析xml
- pull解析xml
- xml解析(PULL)
- Pull 解析xml
- android pull 解析xml
- pull解析xml
- PULL解析XML
- android PULL 解析XML
- Android Pull解析xml
- Pull解析xml文件
- Android Pull 解析 XML
- Android Pull 解析 XML
- 怎样检测人脸相似度(人脸识别技术)
- 2015蓝桥杯决赛
- 程序员编程技术迅速提高的终极攻略(转载)
- Java String类型数据的字节长度
- JSTL学习笔记
- PULL解析XML
- UITableView优化技巧
- Linux查看硬件信息很Easy
- android的编译和运行过程深入分析
- Beacon Interval、DTIM
- springmvc+mybatis
- cocos2dx 打武器玩法实现
- android 页面跳转 action
- 小哥Allegro72讲速成视频【Cadence Allegro16.6视频教程】