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
- SAX
- SAX
- sax
- sax
- SAX
- sax
- SAX
- Sax
- Sax .
- sax
- sax
- SAX
- sax
- sax
- sax
- SAX
- SAX
- SAX
- [LeetCode] Roman to Integer
- 编译时,遇到Couldn't build player because of unsupported data on target platform的解决方案
- 校验手机号码的正则表达式写法 (java实现)
- BNUOJ 34971 BALLS
- 关于sourceinsight卸载后序列号仍然存在的解决办法
- SAX
- 安徽省健康良好手机卡很少见噶还是感觉很
- Spring MVC与JAX-RS比较与分析
- my git
- 「冰果」一曲新时代的招隐之歌
- 深入理解浮点数有效位
- 使用CXF开发RESTFul服务(对于asopapi是实现可以很好地理解)
- db2 db2support
- iOS6苹果地图实用开发