`
kingbinchow
  • 浏览: 122826 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android SAX parse xml

 
阅读更多
<?xml version="1.0" encoding="utf-8"?> 
<products> 
    <product> 
        <id>10</id> 
        <name>电脑</name> 
        <price>2067.25</price> 
    </product> 
    <product> 
        <id>20</id> 
        <name>微波炉</name> 
        <price>520</price> 
    </product> 
</products>


public class Product 
{ 
    private int id; 
    private String name; 
    private float price; 
} 


解析的主要代码

import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class XML2Product extends DefaultHandler {
	private List<Product> products; // 该变量用于保存转换后的结果
	private Product product;
	private StringBuffer buffer = new StringBuffer();

	public List<Product> getProducts() {
		return products;
	}

	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		buffer.append(ch, start, length);
		super.characters(ch, start, length);
	}

	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		// 遇到<product>结点后将在startElement方法中创建的Product对象添加到List对象(products)中
		if (localName.equals("product")) {
			products.add(product);
		}
		// 遇到<id>结点后将结点值赋给 Product.id 属性
		else if (localName.equals("id")) {
			product.setId(Integer.parseInt(buffer.toString().trim()));
			buffer.setLength(0); // 必须清空缓冲区
		}
		// 遇到<name>结点后将结点值赋给 Product.name 属性
		else if (localName.equals("name")) {
			product.setName(buffer.toString().trim());
			buffer.setLength(0);
		}
		// 遇到<price>结点后将结点值赋给 Product.price 属性
		else if (localName.equals("price")) {
			product.setPrice(Float.parseFloat(buffer.toString().trim()));
			buffer.setLength(0);
		}
		super.endElement(uri, localName, qName);
	}

	@Override
	public void startDocument() throws SAXException {
		products = new ArrayList<Product>();
	}

	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		// 当遇到<product>结点时创建 Product 对象
		if (localName.equals("product")) {
			product = new Product();
		}
		super.startElement(uri, localName, qName, attributes);
	}
} 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics