`
375809600
  • 浏览: 150638 次
  • 来自: 湖北
社区版块
存档分类
最新评论

pull解析和pull的写入

阅读更多

 

android常用的解析技术,javaee中使用起来也是非常方便的,轻便灵巧,下面我来为大家贴上代码演示pull的使用

首先是一个名为Product的javabean,后面的类是用来封装数据进javabean或者,将javabean数据写入到xml当中

 

public class Product {
	private String name;
	private double price;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

}
 

xml的解析和写入

 

package cn.itcast.pull;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;

public class PULLCURDTest {

	// 删除商品
	@Test
	// 删除洗衣机
	public void testDelete() throws Exception {
		// 步骤一 将XML数据加载内存 List集合
		List<Product> products = parseXml2List("product.xml");

		// 步骤二 从内存List删除洗衣机
		for (Product product : products) {
			if (product.getName().equals("洗衣机")) {
				products.remove(product);
				break; // 只能删一个
			}
		}

		// 步骤三 将List集合回写XML
		serializeList2Xml("product.xml", products);
	}

	// 测试修改商品
	@Test
	// 将产品价格提升20%
	public void testUpdate() throws Exception {
		// 步骤一 将XML数据加载内存 List集合
		List<Product> products = parseXml2List("product.xml");

		// 步骤二 修改内存中List
		for (Product product : products) {
			double price = product.getPrice();
			price = price * 1.2;// 上涨20%
			product.setPrice(price);
		}

		// 步骤三 将List集合回写XML
		serializeList2Xml("product.xml", products);
	}

	// 测试增加商品
	@Test
	public void testAdd() throws Exception {
		// 步骤一 将XML数据加载内存 List集合
		List<Product> products = parseXml2List("product.xml");

		// 步骤二 添加商品
		Product product = new Product();
		product.setName("数码相机");
		product.setPrice(5000);

		products.add(product);

		// 步骤三 将List集合回写XML
		serializeList2Xml("product.xml", products);
	}

	// 解析XML到List
	public static List<Product> parseXml2List(String filename) throws Exception {
		List<Product> products = new ArrayList<Product>();
		// 解析xml 将xml数据 转换 Product对象,添加到集合
		XmlPullParserFactory xmlPullParserFactory = XmlPullParserFactory
				.newInstance();
		XmlPullParser parser = xmlPullParserFactory.newPullParser();
		parser.setInput(new FileInputStream(filename), "utf-8");

		int eventType;
		Product currentProduct = null;
		while ((eventType = parser.getEventType()) != XmlPullParser.END_DOCUMENT) {
			// 读取<product> 创建新的product
			if (eventType == XmlPullParser.START_TAG
					&& parser.getName().equals("product")) {
				currentProduct = new Product();
			}

			// 设置name属性
			if (eventType == XmlPullParser.START_TAG
					&& parser.getName().equals("name")) {
				currentProduct.setName(parser.nextText());
			}

			// 设置price属性
			if (eventType == XmlPullParser.START_TAG
					&& parser.getName().equals("price")) {
				currentProduct.setPrice(Double.parseDouble(parser.nextText()));
			}

			// 读取</product> 将对象加入集合
			if (eventType == XmlPullParser.END_TAG
					&& parser.getName().equals("product")) {
				products.add(currentProduct);
				currentProduct = null;
			}
			parser.next();
		}

		return products;
	}

	// 回写List到XML
	public static void serializeList2Xml(String filename, List<Product> products)
			throws Exception {
		// 创建序列化对象
		XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
		XmlSerializer serializer = parserFactory.newSerializer();
		serializer.setOutput(new FileOutputStream(filename), "utf-8");

		serializer.startDocument("utf-8", true);
		serializer.startTag(null, "products");
		for (Product product : products) {
			serializer.startTag(null, "product");
			serializer.startTag(null, "name");
			// name的值在product对象中
			serializer.text(product.getName());
			serializer.endTag(null, "name");
			serializer.startTag(null, "price");
			// price的值在product对象中
			serializer.text(product.getPrice() + "");
			serializer.endTag(null, "price");
			serializer.endTag(null, "product");
		}
		serializer.endTag(null, "products");
		serializer.endDocument();
	}
}
分享到:
评论

相关推荐

    Android XML 解析 写入

    Android XML 解析 写入 PULL 方式

    SAX,DOM,PULL解析示例

    此示例介绍了xml的三种解析方式,包括SAX解析,dom解析,pull解析 并介绍了读取文件的方法,怎么写入xml文件等内容,希望对您有所帮助,谢谢。

    Android实现向本地写入一个XML文件和解析XML文件

    在网络存储过程中有很多时候会遇到XML文件解析和使用XML保存一些信息,解析XML文件用的比较多的方法是pull解析和SAX解析,但是我一般只用pull解析,下面就向cd卡写入一个XML文件,然后再使用pull解析的方法对文件...

    Android平台基于Pull方式对XML文件解析与写入方法详解

    假如我们需要开发一个Android应用程序,需要同服务器端进行数据交互,通过XML文件可以很方便的在Android平台和服务器之间进行数据传输,具体实现涉及到对XML文件进行解析及写入的技术。本文实现在Android平台上基于...

    PullParseXmlDemo

    简单演示xml的写入和读取,我这里解析xml用的pull技术,pull解析为官方推荐并且效率高,此demo附有注释,可供参考

    android天气预报

    实现了实时在线查询天气预报信息,首次访问把省、市信息写入xml,之后通过pull解析xml文件,提高访问效率。

    Android利用Document实现xml读取和写入操作

    解析XML文件的方法有很多方法:dom解析,就是document以及PULL和SAX方法。今天给大家分享一下如何用Document来操作XML。 效果图: 首先先对布局文件进行操作:activity_main.xml: &lt;?xml version=1.0 encoding=...

    changelog-ci:Changelog CI是一个生成变更日志的GitHub Action,然后将变更日志提交和/或评论到发布请求Pull

    Changelog CI是一个生成变更日志的GitHub Action,然后将变更日志添加到CHANGELOG.md文件中,并提交和/或注释到发布请求Pull。 它是如何工作的: Changelog CI使用python和GitHub API为存储库生成changelog。 首先...

    quick-xml —高性能XML拉式读取器/写入器-Rust开发

    quick-xml高性能xml拉式读取器/写入器。 读者:几乎为零拷贝(尽可能使用Cow)在内存分配上很容易(AP quick-xml高性能xml pull读写器。读者:几乎为零拷贝(尽可能使用Cow)是易于进行内存分配(API提供了一种重用...

    Zhang21.github.io:利用GitHub + Hexo建个人博客

    ps:我用Docker打造了一个Hexo环境的图片: centos7+git+nodejs使用方法: docker pull zhang21/hexo:init 参考文档 ; ; ; ; ; 。 NexT美化及集成第三方服务,都可以参考此NexT官方文档,很重要! 关于 关于 ...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--xml文件的pull解析与序列化写入 |--xml的封装序列化 |--任务循环之只在Activity显示时执行 |--修改文件的最后修改时间 |--偏好设置(回显) |--内存优化之各种方法 |--内容提供者之短信的序列化对象读写 |--内容...

    adb1.0.26包含fastboot.exe

    这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动...

    新版Android开发教程.rar

    开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了 43 家。 移动手机联盟创始成员: Aplix 、 Ascender 、 Audience 、 Broadcom 、中国移动、 eBay 、 Esmertec 、谷歌、...

Global site tag (gtag.js) - Google Analytics