SAX

来源:互联网 发布:台铃t3电动车价格数据 编辑:程序博客网 时间:2024/06/09 18:50

 

 

products.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>        <product>        <id>30</id>        <name>洗衣机</name>        <price>2400</price>    </product></products>


 

xmltojava.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:mobile="http://mobile.blogjava.net"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <Button        android:layout_width="fill_parent"        android:layout_height="wrap_content"android:onClick="onClick_XMLToObject"        android:text="将XML文件转换成对象" /></LinearLayout>


 

Product.java/** *  */package com.confidant.projects;/** * @author xuhaixin *  */public class Product {private int id;private String name;private float price;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}}


 

XML2Product.java/** * XML2Product类是本例的核心,该类是DefaultHandler的子类,负责处理5个分析点事件。 */package com.confidant.projects;import java.util.ArrayList;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;/** * @author xuhaixin *  */public class XML2Product extends DefaultHandler {// 声明变量用于保存转换后的结果private java.util.List<Product> products;public java.util.List<Product> getProducts() {return products;}private Product product;private StringBuffer buffer = new StringBuffer();/** * 第1个分析点事件方法。在该方法中创建了用于保存转换结果的List<Product>对象。 */@Overridepublic void startDocument() throws SAXException {// 开始分析XML文档,创建List对象用于保存分析完的Product对象products = new ArrayList<Product>();}/** * 第2个分析点事件方法。SAX引擎分析到每一个<product>标签时,在该方法中都回创建一个Product对象。 */@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if (localName.equals("product")) {// 如果开始分析的是<product>标签,创建一个Product对象product = new Product();}super.startElement(uri, localName, qName, attributes);}/** * 第3个分析点事件方法。当SAX引擎每分析完一个XML标签后,会将该标签中的内容保存在Product对象的相应属性当中 */@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {if (localName.equals("product")) {// 处理完<product>标签后,将Product对象添加到products中products.add(product);} else if (localName.equals("id")) {// 设置id属性的值product.setId(Integer.parseInt(buffer.toString().trim()));// 将保存标签内容的缓存区清空buffer.setLength(0);} else if (localName.equals("name")) {// 设置name属性的值product.setName(buffer.toString().trim());// 将保存标签内容的缓存区清空buffer.setLength(0);} else if (localName.equals("price")) {// 设置price属性的值product.setPrice(Float.parseFloat(buffer.toString().trim()));// 将保存标签内容的缓存区清空buffer.setLength(0);}super.endElement(uri, localName, qName);}/** * 第4个分析点事件方法。endDocument,在该方法中什么都没做,也没覆盖该方法。 *//** * 第5个分析点事件方法。该方法中的代码非常之关键,将SAX引擎扫描到的内容保存在buffer变量中, * 而在endElemet方法中药使用该变量中的值来为Product对象中的属性赋值。 */@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {buffer.append(ch, start, length);super.characters(ch, start, length);}}


 

XmlToJava.javapackage com.confidant.projects;import java.io.InputStream;import java.util.List;import android.app.Activity;import android.app.AlertDialog;import android.os.Bundle;import android.util.Xml;import android.view.View;public class XmlToJava extends Activity {public void onClick_XMLToObject(View view) {try {// 获得res/raw/products.xml文件中InputStream对象InputStream is = getResources().openRawResource(R.raw.products);XML2Product xml2Product = new XML2Product();// 开始分析products.xml文件android.util.Xml.parse(is, Xml.Encoding.UTF_8, xml2Product);// 下面的代码用于输出转换后的Java对象的内容List<Product> products = xml2Product.getProducts();String msg = "共" + products.size() + "个产品\n";for (Product product : products) {msg += "id:" + product.getId() + "  产品名:" + product.getName()+ "  价格:" + product.getPrice() + "\n";}new AlertDialog.Builder(this).setTitle("产品信息").setMessage(msg).setPositiveButton("关闭", null).show();} catch (Exception e) {}}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.xmltojava);}}


 

AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.confidant.projects"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="18" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.confidant.projects.XmlToJava"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>


 

0 0
原创粉丝点击