PullXml解析Xml文件(一般用于安卓)
来源:互联网 发布:怎样提高淘宝店铺销量 编辑:程序博客网 时间:2024/04/29 16:37
在移动端,对Xml解析一般是使用PullXml解析,其实还有另外两种解析方式,Dom解析和SAX解析,各有优缺点,今天就先介绍Pull解析方式。
要想使用Pull解析,需要先导入jar包:
给出Xml文件如下:
<note> <to> 小红 </to> <to> Allen </to> <from> John </from> <heading font="微软雅黑" color="red"> Reminder </heading> <body> <font>宋体五号</font> <color>绿色</color> <level>6</level> <mesage>Don't forget the meeting!</mesage> </body> <body> <font>Source Pro Code</font> <color>black</color> <level>1</level> <message>里约</message> </body></note>
由上文件,我们可以创建出实体类,用来保存从Xml文件读取到的信息
/** * project pullxmltest * package PACKAGE_NAME * Created by xsm on 2016/8/9. */public class Note { private List<String> receivers;//用来保存读取到的<to>标签的内容 private String from; //因为heading标签有属性,所以可以创建一个Heading类来保存其内容和属性值 private Heading heading; //用来保存读取到的<body>标签,因为<body>里面有子标签,所以需创建一个Body实体类
private LinkedList<Body> bodies; public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public Heading getHeading() { return heading; } public void setHeading(Heading heading) { this.heading = heading; } public LinkedList<Body> getBodies() { return bodies; } public void setBodies(LinkedList<Body> bodies) { this.bodies = bodies; } public List<String> getReceivers() { return receivers; } public void setReceivers(List<String> receivers) { this.receivers = receivers; } @Override public String toString() { return "Note{" + "receivers=" + receivers + ", from='" + from + '\'' + ", heading=" + heading + ", body='" + bodies + '\'' + '}'; }}
Heading实体类和Body实体类如下:/** * project pullxmltest * package PACKAGE_NAME * Created by xsm on 2016/8/9. */public class Heading { private String font; private String color; private String text; public String getFont() { return font; } public void setFont(String font) { this.font = font; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String getText() { return text; } public void setText(String text) { this.text = text; } @Override public String toString() { return "Heading{" + "font='" + font + '\'' + ", color='" + color + '\'' + ", text='" + text + '\'' + '}'; }}
/** * project pullxmltest * package PACKAGE_NAME * Created by xsm on 2016/8/9. */public class Body { private String font; private String color; private int level; private String message; public String getFont() { return font; } public void setFont(String font) { this.font = font; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } @Override public String toString() { return "Body{" + "font='" + font + '\'' + ", color='" + color + '\'' + ", level=" + level + ", message='" + message + '\'' + '}'; }}解析方式如下:
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.ArrayList;import java.util.LinkedList;/** * project pullxmltest * package PACKAGE_NAME * Created by xsm on 2016/8/9. */public class Test01 { public static void main(String[] args) { String src = "<note>\n" + " <to>\n" + " 小红\n" + " </to>\n" + " <to>\n" + " Allen\n" + " </to>\n" + " <from>\n" + " John\n" + " </from>\n" + " <heading font=\"微软雅黑\" color=\"red\">\n" + " Reminder\n" + " </heading>\n" + " <body>\n" + " <font>宋体五号</font>\n" + " <color>绿色</color>\n" + " <level>6</level>\n" + " <mesage>Don't forget the meeting!</mesage>\n" + " </body>\n" + " <body>\n" + " <font>Source Pro Code</font>\n" + " <color>black</color>\n" + " <level>1</level>\n" + " <message>里约</message>\n" + " </body>\n" + "</note>"; try { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(new FileInputStream("res/test.xml"),"UTF-8");//给出Xml文件的地址,并指定编码 Note note = new Note(); note.setReceivers(new ArrayList<String>()); note.setBodies(new LinkedList<Body>()); int type; while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) { switch (type) { case XmlPullParser.START_DOCUMENT: System.out.println("文档开始"); break; case XmlPullParser.START_TAG: switch (parser.getName()){ case "to": note.getReceivers().add(parser.nextText().trim()); break; case "from": note.setFrom(parser.nextText()); break; case "heading": Heading heading = new Heading(); heading.setFont(parser.getAttributeValue(null,"font")); heading.setColor(parser.getAttributeValue(null,"color")); heading.setText(parser.nextText()); note.setHeading(heading); break; case "body": note.getBodies().add(new Body()); break; case "font": note.getBodies().getLast().setFont(parser.nextText().trim()); break; case "color": note.getBodies().getLast().setColor(parser.nextText().trim()); break; case "level": note.getBodies().getLast().setLevel(Integer.parseInt(parser.nextText().trim())); break; case "message": note.getBodies().getLast().setMessage(parser.nextText().trim()); break; } break; case XmlPullParser.TEXT: break; case XmlPullParser.END_TAG: System.out.println(parser.getName() + "标签结束"); break; } } System.out.println(note.getReceivers()); System.out.println(note.getBodies()); System.out.println(note.getHeading()); } catch (XmlPullParserException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}得到结果如下图:
解析过程中的方法如有不懂可以参考http://www.kxml.org/javadoc/index.html
0 0
- PullXml解析Xml文件(一般用于安卓)
- Android Apps xml创建与解析PullXml
- pullxml解析
- 安卓SAX解析XML文件
- 安卓设备PULL解析XML文件
- 6.安卓pull解析XML文件
- 安卓xml解析
- 解析 xml 安卓
- 安卓 解析xml
- 安卓xml解析
- 安卓使用DOM,SAX,PULL解析xml,安卓写入xml文件
- 【安卓笔记】安卓下xml文件的解析
- 安卓解析XML文件系列1:使用SAX方式
- 安卓解析XML文件系列2:使用PULL方式
- 安卓解析XML文件系列3:使用DOM方式
- 安卓学习之---SAX方式解析XML文件
- Cocos2d-x tinyxml2用于xml的解析,自动生成xml文件和解析xml文件
- 安卓sax解析xml
- 线段树入门
- WebView in CoordinatorLayout with CollapsingToolbarLayout
- 有关Python的inheritance
- UVa 712 S-Trees S树
- 杭电 ACM 1228 A+B
- PullXml解析Xml文件(一般用于安卓)
- Oracle数据库中scott用户不存在的解决方法
- C语言静态链接
- c语言的数据类型
- HDU 5812 Distance
- vue 多页面配置
- 读写文件&自动生成esMapping
- Openjudge-〖NOIP2006P〗数列
- 重写与重载