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();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值