XMLPull解析(3)-CURD
来源:互联网 发布:环境信息元数据规范 编辑:程序博客网 时间:2024/05/01 21:31
在增删改查之前要知道XMLPULL解析采取的是边处理、边解析的方式,处理完马上释放资源,从而不能进行及时修改。
为了解决这个问题。我们可以借用List集合作为桥梁。先把xml数据全部读入集合中,然后对集合进行修改。 最后再重新写入XML文件。
1、xml---List
2、List---XML
下面通过实例进行分析“:
为了提供效率,进行了代码封装,把整个过程提炼成两个方法/:
1.parseXml2List(String xmlName);
2.List2XML(List<Company> companies, String xmlName);
写入一个工具类ParseUitl中:
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.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;public class ParseUtils {public static List parseXml2List(String xmlName) throws Exception {List<Company> companies = new ArrayList<Company>();Company company = null;// parseXml2ListXmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlPullParser xpp = factory.newPullParser();xpp.setInput(new FileInputStream(xmlName), "utf-8");int event;while ((event = xpp.getEventType()) != XmlPullParser.END_DOCUMENT) {if (event == XmlPullParser.START_TAG&& xpp.getName().equals("company")) {company = new Company();}if (event == XmlPullParser.START_TAG&& xpp.getName().equals("name")) {String name = xpp.nextText();company.setName(name);}if (event == XmlPullParser.START_TAG&& xpp.getName().equals("pnum")) {int pnum = Integer.parseInt(xpp.nextText());company.setPnum(pnum);}if (event == XmlPullParser.START_TAG&& xpp.getName().equals("address")) {String address = xpp.nextText();company.setAddress(address);}if (event == XmlPullParser.END_TAG&& xpp.getName().equals("company")) {companies.add(company);}xpp.next();}for (Company c : companies) {System.out.println(c.getName() + " " + c.getPnum() + " "+ c.getAddress() + "\n");}return companies;}public static void List2XML(List<Company> companies, String xmlName)throws Exception {XmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlSerializer serializer = factory.newSerializer();serializer.setOutput(new FileOutputStream(xmlName), "utf-8");serializer.startDocument("utf-8", true);serializer.startTag(null, "companies");for (Company c : companies) {serializer.startTag(null, "company");serializer.startTag(null, "name");serializer.text(c.getName());serializer.endTag(null, "name");serializer.startTag(null, "pnum");serializer.text(c.getPnum() + "");serializer.endTag(null, "pnum");serializer.startTag(null, "address");serializer.text(c.getAddress());serializer.endTag(null, "address");serializer.endTag(null, "company");}serializer.endTag(null, "companies");serializer.endDocument();}}
然后在测试类中调用两个方法,并对集合进行操作,完成对xml文件的修改,最后写回XML文件:
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.junit.Test;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;public class XMLPulldemo {// 修改xml. 因为STAX是采用边处理边解析的模式,没有保存数据。 所以这里需要采用List集合来保存数据 ,起到中转站的作用。@Testpublic void demo4() throws Exception {List<Company> companies = ParseUtils.parseXml2List("book_bak3.xml");//增加Company对象 Company company=new Company(); company.setName("微软"); company.setPnum(3000); company.setAddress("美国"); companies.add(company); //修改对象将阿里巴巴的pnum翻一倍; for (Company c : companies) {if(c.getName().equals("阿里巴巴")){c.setPnum(c.getPnum()*2);}} //删除腾讯对象 for (Company c : companies) { if(c.getName().equals("腾讯")){ companies.remove(c); break; }} ParseUtils.List2XML(companies, "book_bak3.xml");}
}
以上就是XMLpull解析原理的入门介绍。
0 0
- XMLPull解析(3)-CURD
- xmlPull解析
- XmlPull解析
- XMLPuLL解析
- XMLPULL 解析
- XMLPULL解析
- Xmlpull解析
- xmlpull解析
- XmlPull解析
- xmlPull解析网络数据(xml文件)
- 使用xmlpull解析xml
- 使用XmlPull解析XML
- xmlpull解析XML
- 使用Xmlpull解析xml
- xml解析-xmlpull
- xmlpull解析xml
- xml请求,xmlpull解析
- 存储方式二:文件(XML XmlPull解析)
- 新手报到
- 汽车作为智能终端暂时没有也不会有太大意思
- android自动启动服务
- C++中的存储技术
- 淘宝营销站列表
- XMLPull解析(3)-CURD
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 将组建编译成dpk包文件
- UVa 123 - Searching Quickly解题报告
- RTF格式的深入研究
- 树、森林和二叉树的转换
- 297 - Quadtrees
- 字符串常用的知识
- Cocos2d-x学习(1)