STAX解析
2016-05-26 20:27
274 查看
STAX 拉模式xml 解析方式 —– 客户端程序,自己控制xml事件,主动调用相应事件方法
当使用XML PULL 如果使用Android系统,系统内置无需下载任何开发包,如果想JavaSE JavaEE 使用pull 解析技术 下载单独pull 开发工具包
xpp3 —– XML Pull Parser 3 是pull API 代码实现
使用pull 解析器
1、去网站上 下载 pull 解析器实现 xpp3 (Android 内置)
2、将 xpp3-1.1.3.4.C.jar 导入 java工程
导入jar包 位于 当前工程内部 , 在工程内新建 lib ,将jar复制过来 , 将pull 解析器 jar 添加build path
jar 包就是.class文件 集合压缩包 (采用zip格式压缩)
Pull解析器 使用 stax 解析方式 —- 拉模式解析
Pull采用将xml文档传递 解析器,手动通过next触发文档解析事件,在客户端代码中获取当前事件 ,从而调用相应事件处理方法
3、创建pull 解析器
4、将xml 文档内容传递 pull 解析器
为什么 STAX 解析方式 效率 好于 SAX ?
1、SAX 无选择性的,所有事件都会处理 解析方式,Stax 由用户控制需要处理事件类型
2、在使用Stax进行数据解析时,随时终止解析
Pull 解析器 生成 xml 文档功能 —- 通过 XmlSerializer 生成 xml 文档
解析xml : 文档开始、元素开始、文本元素、元素结束、文档结束
生成xml :生成文档声明(文档开始),元素开始、文本内容、元素结束 、文档结束
1、生成简单xml
2、通过对象数据生成xml
3、通过对象List数据生成xml
在程序中抽取两个方法 —– 1. xml — List对象 2. List对象生成xml
对内存中List进行CURD操作
XML 文件
编写一个 company实体
解析的工具类
测试 和增删改查
本笔记来源于 视频课程 仅供记录学习。
当使用XML PULL 如果使用Android系统,系统内置无需下载任何开发包,如果想JavaSE JavaEE 使用pull 解析技术 下载单独pull 开发工具包
xpp3 —– XML Pull Parser 3 是pull API 代码实现
使用pull 解析器
1、去网站上 下载 pull 解析器实现 xpp3 (Android 内置)
2、将 xpp3-1.1.3.4.C.jar 导入 java工程
导入jar包 位于 当前工程内部 , 在工程内新建 lib ,将jar复制过来 , 将pull 解析器 jar 添加build path
jar 包就是.class文件 集合压缩包 (采用zip格式压缩)
Pull解析器 使用 stax 解析方式 —- 拉模式解析
Pull采用将xml文档传递 解析器,手动通过next触发文档解析事件,在客户端代码中获取当前事件 ,从而调用相应事件处理方法
3、创建pull 解析器
4、将xml 文档内容传递 pull 解析器
为什么 STAX 解析方式 效率 好于 SAX ?
1、SAX 无选择性的,所有事件都会处理 解析方式,Stax 由用户控制需要处理事件类型
2、在使用Stax进行数据解析时,随时终止解析
Pull 解析器 生成 xml 文档功能 —- 通过 XmlSerializer 生成 xml 文档
解析xml : 文档开始、元素开始、文本元素、元素结束、文档结束
生成xml :生成文档声明(文档开始),元素开始、文本内容、元素结束 、文档结束
1、生成简单xml
2、通过对象数据生成xml
3、通过对象List数据生成xml
在程序中抽取两个方法 —– 1. xml — List对象 2. List对象生成xml
对内存中List进行CURD操作
XML 文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <companies> <company> <name>西藏大学</name> <pnum>40000</pnum> <address>拉萨</address> </company> <company> <name>新疆大学</name> <pnum>30000</pnum> <address>新疆</address> </company> </companies>
编写一个 company实体
package com.qddx.ws; public class company { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPnum() { return pnum; } public void setPnum(int pnum) { this.pnum = pnum; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } private int pnum; private String address; }
解析的工具类
package com.qddx.ws; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; /* * 抽取两个方法 XMl--list对象 list对象---XML * * */ public class PullUtils { /* * 接收xml文件返回list集合 */ public static List<company> ParseXMLtoList(String fileName) throws Exception { // 获得解析器 List<company> companies = new ArrayList<company>(); XmlPullParser xmls = XmlPullParserFactory.newInstance().newPullParser(); // 设置xml输入文件 xmls.setInput(new FileInputStream(fileName), "UTF-8"); int event; // 定义一个临时的company引用 company com = null; while ((event = xmls.getEventType()) != XmlPullParser.END_DOCUMENT) { // 将每个company对象封装成company对象 // 1.在company开始的时候 创建company对象 if (event == XmlPullParser.START_TAG && xmls.getName().equals("company")) { com = new company(); } // 2.读取name元素是时,向company对象封装name属性 if (event == XmlPullParser.START_TAG && xmls.getName().equals("name")) { com.setName(xmls.nextText()); } // 3.读取pnum属性时 向company对象封装pnum属性 if (event == XmlPullParser.START_TAG && xmls.getName().equals("pnum")) { com.setPnum(Integer.parseInt(xmls.nextText())); } // 4.读取address属性时向company对象封装address属性 if (event == XmlPullParser.START_TAG && xmls.getName().equals("address")) { com.setAddress(xmls.nextText()); } // 读取company 结束时将company对象加入集合 if (event == XmlPullParser.END_TAG && xmls.getName().equals("company")) { companies.add(com); } // 解析下一个事件 xmls.next(); } return companies; } public static void ParseListtoXML(List<company> companies, String fileName) throws Exception { // 获得序列化对象 XmlSerializer xmls = XmlPullParserFactory.newInstance().newSerializer(); // 写文件之前 指定要输出的文件 xmls.setOutput(new FileOutputStream(fileName), "UTF-8"); // 文档开始 xmls.startDocument("UTF-8", true); // 根元素开始 xmls.startTag(null, "companies"); for (company c : companies) { // company属性开始 xmls.startTag(null, "company"); // name属性开始 xmls.startTag(null, "name"); // 文本属性 xmls.text(c.getName()); // name属性结束 xmls.endTag(null, "name"); // pnum属性开始 xmls.startTag(null, "pnum"); // 文本属性开始 xmls.text(c.getPnum() + ""); // pnum属性结束 xmls.endTag(null, "pnum"); // address属性开始 xmls.startTag(null, "address"); // 文本属性 xmls.text(c.getAddress()); // address属性结束 xmls.endTag(null, "address"); // company属性结束 xmls.endTag(null, "company"); } // 根元素结束 xmls.endTag(null, "companies"); // 文档结束 xmls.endDocument(); } }
测试 和增删改查
package com.qddx.ws; import java.io.FileInputStream; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; /* * 完成pULL解析CURD * * */ public class PullCURD { @Test public void TestDelete() throws Exception { // 1. 将xml数据加载到内存 List<company> companies = PullUtils.ParseXMLtoList("companies.xml"); // 从 List集合删除西藏大学的company对象 for (company com : companies) { if (com.getName().equals("西藏大学")) { companies.remove(com); break; } } // 3.回写到xml PullUtils.ParseListtoXML(companies, "company_bak_xml"); } @Test public void TestUpdate() throws Exception { // 将 xml数据加载到内存 List<company> companies = PullUtils.ParseXMLtoList("companies.xml"); // 遍历company集合 for (company com : companies) { if (com.getName().equals("新疆大学")) { com.setPnum(com.getPnum() * 2); } } // 回写到xml PullUtils.ParseListtoXML(companies, "company_bak.xml"); } @Test public void TestSelect() throws Exception { // 解析xml数据到内存 List<company> companies = PullUtils.ParseXMLtoList("company.xml"); // 遍历company 集合 for (company com : companies) { if (com.getName().equals("新疆大学")) { System.out.println(com.getPnum()); } } } @Test public void TestAdd() throws Exception { // 解析xml数据到内存 List<company> companies = PullUtils.ParseXMLtoList("company.xml"); company com = new company(); com.setName("江南"); com.setPnum(3000); com.setAddress("南方的"); companies.add(com); PullUtils.ParseListtoXML(companies, "company_bak.xml"); } @Test // 测试工具类PullUtils 中的方法 public void demo2() throws Exception { // 将company。xml 复制 company_bak.xml // 解析获得集合 List<company> companies = PullUtils.ParseXMLtoList("company.xml"); // 将集合写入 company_bak.xml PullUtils.ParseListtoXML(companies, "company_bak.xml"); } @Test // 将xml中的数据---List集合 public void demo1() throws Exception { // 获得解析器 XmlPullParser xmls = XmlPullParserFactory.newInstance().newPullParser(); List<company> companies = new ArrayList<company>(); company com = null; // 向解析器传入xml文件 xmls.setInput(new FileInputStream("companies.xml"), "UTF-8"); // 遍历解析 int event; while ((event = xmls.getEventType()) != XmlPullParser.END_DOCUMENT) { if (event == XmlPullParser.START_TAG && xmls.getName().equals("company")) { // 创建com对象 com = new company(); } if (event == XmlPullParser.START_TAG && xmls.getName().equals("name")) { // 元素开始封装属性 com.setName(xmls.nextText()); } if (event == XmlPullParser.START_TAG && xmls.getName().equals("pnum")) { com.setPnum(Integer.parseInt(xmls.nextText())); } if (event == XmlPullParser.START_TAG && xmls.getName().equals("address")) { com.setAddress(xmls.nextText()); } if (event == XmlPullParser.END_TAG && xmls.getName().equals("company")) { // 结束 companies.add(com); } xmls.next(); } for (company c : companies) { System.out.println(c.getName()); System.out.println(c.getAddress()); System.out.println(c.getPnum()); System.out.println("------------"); } } }
本笔记来源于 视频课程 仅供记录学习。
相关文章推荐
- MYSQL自动备份脚本
- Codeforces Round #328 div2
- 2016湖大校赛 L题 The Sequence likes Ladder
- 11. SpringMVC_CookieValue 注解
- mui中的一些弹窗
- 回看之前的自己
- 浏览器的重绘与重排
- #include<sys/types.h>头文件作用
- mybatis系列-11-一对多查询
- hack解决ie6不支持position:fixed;
- ActiveMQ笔记(5):JMX监控
- MSDN Library for vs 2010 下载和安装
- leetcode---First Missing Positive
- dede摘要长度,dedecms摘要限制,dedecms摘要字数
- POJ3255-Roadblocks
- UVA - 11478 Halum 二分+差分约束
- 6_10 下落的树叶(UVa699)<二叉树的DFS>
- 转发:招聘一个靠谱的 iOS
- POJ2342 Anniversary party(树状DP)
- C语言实现面向对象风格带迭代器的双向链表