Pull 解析xml
来源:互联网 发布:javac 知乎 编辑:程序博客网 时间:2024/06/06 19:10
Pull 解析xml
xmlpull方式解析xml是android开发中解析xml的推荐方式。
XmlPull和Sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中。 但Xmlpull比Sax更简明,而且不需要扫描完整个流。
Java实现
在这里我们使用KXML来实现解析.
KXML实现下面三个接口: org.xmlpull.v1.XmlPullParser; org.xmlpull.v1.XmlPullParserException; org.xmlpull.v1.XmlPullParserFactory;
1.导入KXML包
从官网下载jar包,导入工程
2.pullXmlService.java
package com.kanbujian.xmlservice;import java.io.IOException;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.XmlPullParserFactory;import com.kanbujian.model.User;/** * 以pull的方式解析xml * * @author QT * */public class pullXmlService { /** * * @param is 读取网络上xml文件的输入流 * @param encode 字符编码格式 * @return 元素集合 */ public static List<User> pullXml(InputStream is, String encode) { List<User> list = null; User u = null; try { // 得到解析器工厂,通过静态方法获取一个解析工程对象的引用 XmlPullParserFactory xpf = XmlPullParserFactory.newInstance(); // 通过解析器工厂的得到一个XmlPullParser解析器对象 XmlPullParser parser = xpf.newPullParser(); //獲得時間類型 int eventType = parser.getEventType(); // 解析器设置输入流和编码格式 // 把这一句漏了还搞个毛呀 parser.setInput(is, encode); // while 遍历 ,只要事件类型不等于文档结束标志 while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { // 如果事件类型为START_DOCUMENT,即读取文档开头 case XmlPullParser.START_DOCUMENT: list = new ArrayList<User>(); break; // 元素标记开头标志 // 运用pull方式解析xml需要知道节点标签的名称 case XmlPullParser.START_TAG: /* 如果在此處聲明 u = new User(); * 輸出 User [id=0, username=null, age=0, password=12345] * 每次循環都會新建一個對象 * */ if ("user".equals(parser.getName())) { //衹有當標簽名稱爲user時,新建一個對象 u = new User(); int id = Integer.parseInt(parser.getAttributeValue(0)); //System.out.println("標簽名爲User ,設置ID "+id); u.setId(id); } else if ("username".equals(parser.getName())) { String username = parser.nextText();// 获取该节点内容 //System.out.println("設置username "+username); u.setUsername(username); } else if ("age".equals(parser.getName())) { int age = Integer.parseInt(parser.nextText());// 获取该节点内容 //System.out.println("設置age "+age); u.setAge(age); } else if ("password".equals(parser.getName())) { //System.out.println("設置password"); String password = parser.nextText();// 获取该节点内容 u.setPassword(password); } break; case XmlPullParser.END_TAG: if ("user".equals(parser.getName())) { list.add(u); u = null; } break; } // 每次switch选择后跳转到下一标签,事件类型 eventType = parser.next(); } } catch (XmlPullParserException e) { // TODO Auto-generated catch block System.out.println("nikan 出错了吧"); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return list; }}
3.User实体类
package com.kanbujian.model;public class User { private int id; private String username; private int age; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", age=" + age + ", password=" + password + "]"; }}
4.Http工具类
package com.kanbujian.http;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;/** * http工具類 * @author QT * */public class HttpUtils { public HttpUtils() { // TODO Auto-generated constructor stub } /** * 通過URL獲取輸入流 * @param path * @return */ public static InputStream getXml(String path){ InputStream is=null; try { URL url=new URL(path); if(url!=null){ //獲得HttpURLConnnection HttpURLConnection connection =(HttpURLConnection)url.openConnection(); //設置屬性 connection.setConnectTimeout(3000); connection.setDoInput(true); connection.setRequestMethod("GET"); int code=connection.getResponseCode(); //GET請求成功 if(code==200){ is=connection.getInputStream(); } } } catch (Exception e) { // TODO: handle exception } return is; }}
5.测试类
package com.kanbujian.text;import java.io.InputStream;import java.util.List;import com.kanbujian.http.HttpUtils;import com.kanbujian.model.User;import com.kanbujian.xmlservice.pullXmlService;public class pullXmlTest { public static void main(String[] args) { // TODO Auto-generated method stub String path="http://localhost:8080/jay01/user.xml"; InputStream is=HttpUtils.getXml(path); List<User> list=pullXmlService.pullXml(is, "UTF-8"); for(User u: list){ System.out.println(u); } }}
6.xml文件内容及运行结果
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
- eclipse工具使用 (代码注释 工具配置)
- 插件机制(转)
- CSU 1101 报数游戏
- 《一种基于固态盘和硬盘的混合存储架构》 结
- javascript - 【事件冒泡】和【事件捕获】
- Pull 解析xml
- 测试用例设计经典面试题——电梯,杯子,笔,桌子,洗衣机
- Swift学习笔记(十四)——字符,常量字符串与变量字符串
- 怎样使左侧菜单栏不随滚动条滚动
- Microsoft.Windows.TimedPowerShell.DiscoveryProvider
- Android 多文件夹相册 + 获取最近拍照分析
- jq的旋转库
- 思维导图之----javascript正则表达式知识树
- 中国剩余定理