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

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();
	}
}
分享到:
评论

相关推荐

    pull解析器的使用

    2. **生成测试**:编写函数生成XML字符串或文件,使用Pull解析器写入数据。测试用例应验证生成的XML是否符合预设的格式和内容。 3. **异常测试**:确保在处理错误输入或异常情况时,程序能够适当地抛出异常或给出...

    android pull解析 创建xmlw文件

    本项目"android pull解析 创建xmlw文件"是一个完整的工程示例,旨在帮助开发者理解和应用XML Pull解析来创建XML文件,尤其是XMLW格式的文件。下面我们将详细探讨XML Pull解析的工作原理以及如何在Android中实现。 1...

    pull解析器解析XML工具类

    在Android开发中,由于其轻量级和低内存占用,Pull解析器常常被用来解析XML文档,尤其是在处理大数据量时,相比DOM和SAX解析器更为高效。 Pull解析器是一种事件驱动的解析方式,它不会一次性加载整个XML文档到内存...

    pull解析器

    相比于DOM解析和SAX解析,Pull解析器更加轻量级,因为它不需要将整个XML文档加载到内存中,而是通过事件驱动的方式逐行读取和解析XML,从而节省内存资源。在Android中,`XmlPullParser`是官方提供的Pull解析器实现。...

    Pull解析与生成Xml

    本文将深入探讨“Pull解析”这一技术,它是处理XML文档的一种高效方式,特别适合内存有限的设备。我们将讲解如何使用Pull解析器读取本地XML文件,并生成一个新的、格式不同的XML文件。 Pull解析是一种事件驱动的...

    android下的pull解析器解析和生成xml文件

    本篇将深入探讨Android下Pull解析器的使用,以及如何利用它来解析和生成XML文件。 一、Android Pull解析器简介 Pull解析器是基于事件驱动的解析模型,它不保留整个XML文档的内存映像,而是按需读取和处理XML元素。...

    Android 生成和PULL解析xml

    总结起来,Android中的XML生成和PULL解析是两个重要的技能。生成XML文件可以方便地存储和传输数据,而PULL解析器则提供了一种高效、低内存消耗的方式来解析XML数据。理解并熟练掌握这些技术对于Android开发者来说至...

    通过SAX和PULL来解析XML,同时生成xml

    1. 使用SAX或PULL解析XML,当遇到需要处理的元素时,将相关信息保存到内存或写入新的XML文件。 2. 在解析过程中,根据处理的事件生成相应的XML元素。如果是开始元素,就创建一个新的元素;如果是结束元素,就关闭...

    SAX,DOM,PULL解析示例

    总结,SAX、DOM和PULL解析器各有优缺点,选择哪种取决于具体需求。SAX适合处理大型文件,DOM适合需要随机访问的场景,而PULL则为移动开发提供轻量级的解决方案。了解和掌握这些解析方式,对于进行XML处理和开发相关...

    Android中使用pull解析器操作xml文件的解决办法

    在Android开发中,处理XML数据是一项常见的任务,而Android提供了内置的Pull解析器来高效地读取和生成XML文件。本文将详细介绍如何使用Pull解析器来操作XML。 首先,我们来理解什么是Pull解析器。Pull解析器是一种...

    Pull解析方式

    Pull解析采用事件驱动模型,通过读取XML文档的每一个元素事件来解析数据,相比DOM(Document Object Model)和SAX(Simple API for XML)两种传统的解析方式,具有更小的内存消耗和更快的解析速度。 #### Pull解析...

    Android XML 解析 写入

    本篇将详细探讨Android中的XML解析,特别是PULL解析方式,并讲解如何进行XML的写入操作。 ### 1. Android XML解析概述 XML解析器分为两种主要类型:DOM(Document Object Model)和PULL(Pull Parser)。DOM解析器...

    用pullXML解析本地数据并存在本地

    PullXML解析器是Android系统提供的一种轻量级的XML解析方法,它适用于处理大量的XML数据,特别是当内存有限或需要高效处理流式数据时。本文将深入探讨如何使用PullXML解析本地XML数据,并将解析后的数据存回本地。 ...

    Android中采用Pull解析器读取和生成xml内容案例

    本案例将深入探讨如何使用Pull解析器读取和生成XML内容。 首先,理解XMLPullParser的工作原理至关重要。它通过移动到文档的不同事件(如START_TAG、END_TAG、TEXT等)来解析XML,这样开发者可以逐个处理元素,而不...

    PullXML和Json

    本文将详细探讨"PullXML"和"Json读写解析",并结合提供的压缩包文件名,主要关注Android平台上的实现。 XML(eXtensible Markup Language)是一种标记语言,用于描述数据结构和内容。它具有严格的语法规则,允许...

    XML的三种解析方式

    总结来说,理解并掌握XML的DOM、SAX和PULL解析方式是每个IT专业人士必备的技能。它们在数据处理、Web服务、应用程序间通信等众多领域都发挥着重要作用。熟练运用这些解析技术,能有效提升开发效率,优化程序性能,...

    Android网络下的XML解析和生成.

    在Android开发中,XML(eXtensible Markup ...不论是选择DOM、SAX还是Pull解析,或是利用Volley、Retrofit等库处理网络中的XML,都需要根据具体需求和性能考虑。在实践中不断优化,才能更好地驾驭XML这一数据交换格式。

    xml技术,包括各种解析方式

    与SAX相比,PULL解析器更易于使用,因为开发者可以控制何时开始和结束解析,使得代码更简洁。 4. StAX(Streaming API for XML)解析: StAX是一种流式API,介于DOM和SAX之间,提供了一种向下的迭代方式来处理XML。...

    XML解析jar包

    2. **PULL解析器**:PULL解析器类似于SAX,也是事件驱动的,但它提供了一个更简单的API,允许开发者通过调用下一个事件来控制解析过程。Android SDK中内置的`XmlPullParser`就是PULL解析器的一个例子。 3. **DOM...

Global site tag (gtag.js) - Google Analytics