`
桥下一粒砂
  • 浏览: 208119 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android中,把XML文件转换成Object对象的方法

阅读更多

XML文件为:

 

 

<?xml version="1.0" encoding="UTF-8"?>
<profile>
	<title>Android开发实例基础</title>
	<totalTime>120</totalTime>
	<totalScore>100</totalScore>
	<subjectCount>70</subjectCount>
	<score>0</score>
	<elapsedTime>0</elapsedTime>
	<passingScore>60</passingScore>
	<descriptions>描述</descriptions>
	<matrix>1111111111111111111111111111111111111111111111111111111111111111111111</matrix>
</profile>

 

 

XML对应的Java对象为:

 

 

package com.lurencun.chenyoca.exam.entity;

public class ProfileObject {
	/**
	 * 考卷信息
	 */
	private TestpaperObject testpaper = null;
	
	/**
	 * 题目对错矩阵
	 */
	private boolean[] matrix = null;
	
	public TestpaperObject getTestpaper() {
		if(testpaper == null) testpaper = new TestpaperObject();
		return testpaper;
	}
	public void setTestpaper(TestpaperObject testpaper) {
		this.testpaper = testpaper;
	}
	public boolean[] getMatrix() {
		return matrix;
	}
	public void setMatrix(boolean[] matrix) {
		this.matrix = matrix;
	}
	
}

 

 

把XML转换成Java对象的类:

 

 

package com.lurencun.chenyoca.exam.util;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.lurencun.chenyoca.exam.entity.ProfileObject;

public class XmlToPVO extends DefaultHandler {
	private ProfileObject po;
	private StringBuffer buffer = new StringBuffer();
	private final static String TAG = "1";
	public ProfileObject getProfile(){
		return po;
	}
	
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if(localName.equals("profile")){
			po = new ProfileObject();
		}
		super.startElement(uri, localName, qName, attributes);
	}
	
	@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 {
		boolean cleanBuffer = true;
		if(localName.equals("profile")){ 
			cleanBuffer = false;
		}else if(localName.equals("title")){ 
			po.getTestpaper().setTitle(buffer.toString().trim());
		}else if(localName.equals("totalTime")){ 
			po.getTestpaper().setTotalTime(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("totalScore")){ 
			po.getTestpaper().setTotalScore(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("subjectCount")){ 
			po.getTestpaper().setSubjectCount(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("score")){ 
			po.getTestpaper().setScore(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("elapsedTime")){ 
			po.getTestpaper().setElapsedTime(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("passingScore")){ 
			po.getTestpaper().setPassingScore(Integer.parseInt(buffer.toString().trim()));
		}else if(localName.equals("descriptions")){ 
			po.getTestpaper().setDescription(buffer.toString().trim());
		}else if(localName.equals("matrix")){
			char[] mx = buffer.toString().toCharArray();
			boolean[] matrix = new boolean[mx.length];
			for(int i=0;i<mx.length;i++){
				if(TAG.equals(mx[i])){
					matrix[i] = true;
				}else{
					matrix[i] = false;
				}
			}
			po.setMatrix(matrix);
		}
		if(cleanBuffer) buffer.setLength(0);
		super.endElement(uri, localName, qName);
	}
}
 

   在需要执行XML转换的地方执行以下代码:

 

 

XmlToTVO xtt = new XmlToTVO(testpaperList); //构造方法是我自己的
//file是 File对象实体,是XML文件的对象实体。
android.util.Xml.parse(new FileInputStream(file),Xml.Encoding.UTF_8,xml);

 

   Android框架的SAX引擎会自动调用相关方法,把XML中的数据填充到JavaObject中。

 

   更多相关SAX的知识,请自己Google。

分享到:
评论

相关推荐

    android XML文件解析和序列化 demo

    在"android XML文件解析和序列化 demo"中,可能演示了如何创建自定义对象,使用Pull解析器读取XML文件,将数据填充到对象列表,然后使用类似Gson或自定义的方法将对象列表序列化回XML文件。 **代码示例** ```java ...

    android Dom解析xml文件

    DOM解析是一种将XML文件转换为内存中对象模型的方法。它将XML文档视为一棵树,其中每个元素、属性和文本节点都是树上的一个节点。通过遍历这个树,可以轻松地访问和修改XML数据。 ### 2. Android中的DOM解析库 在...

    Android中xml转json

    在Android中,转换XML到JSON主要有两种方法: 1. **使用内置的Java库:** Android SDK本身并不直接提供XML到JSON的转换功能,但可以利用Java的标准库如`javax.xml.parsers.DocumentBuilderFactory`解析XML,然后...

    android sax ,dom生成xml文件

    本文将深入探讨两种主要的XML文件生成方法:SAX(Simple API for XML)和DOM(Document Object Model),并结合Android环境进行详细阐述。 首先,我们来看SAX解析器。SAX是一种事件驱动的解析器,它不会一次性加载...

    android-xml文件解析教程

    对于特定的需求,开发者还可以选择使用第三方库,如FastXml(Jackson的XML模块)或Gson,它们提供了将XML转换为Java对象或JSON的方便方法。 6. **XML示例文件(xmlDemon)** 压缩包中的`xmlDemon`可能是用来演示XML...

    android xml多种解析生成

    * XmlSerializer 是 Android 中的一种内置序列化器,它可以将 Java 对象转换为 XML 文件。 * DocumentBuilderFactory 是 Java 中的一种 DocumentBuilderFactory,它可以将 Java 对象转换为 XML 文件。 使用 ...

    六,Android Xml解析

    Android的LayoutInflater服务负责将这些布局XML转换为View对象层次结构。 2. **AndroidManifest.xml**:这是每个Android应用的核心配置文件,包含了应用的元数据、权限声明、活动、服务、广播接收器等。Android系统...

    android中解析xml和生成xml的方法

    `Transformer`类用于将`Document`对象转换为XML文件。 总结起来,Android提供了DOM和SAX两种解析XML的方法,以及基于`javax.xml`库的XML生成机制。开发者可以根据实际需求和性能考虑选择合适的解析和生成方式。对于...

    安卓Android源码——AndroidXstream(解决xml和对象转换问题).rar

    AndroidXstream是针对Android平台的一个库,它提供了方便的方式来处理XML序列化和反序列化,即把Java对象转换为XML字符串,或者从XML字符串恢复为Java对象。这篇内容将详细讲解AndroidXstream如何解决XML与对象转换...

    Android应用源码之AndroidXstream(解决xml和对象转换问题).rar

    在Android开发中,尤其是在处理数据存储或网络通信时,XML转换是常见的需求。AndroidXstream库简化了这个过程,减少了手动编写解析代码的工作量。 XStream的核心功能在于它的两个主要方法:`toXML()`和`fromXML()`....

    android解析xml实例

    我们的目标是从这个XML文件中读取数据并将其转换为Java对象。 #### 二、DOM解析实现 为了解析这个XML文件,我们将使用DOM(Document Object Model)解析器。下面是一段使用DOM解析XML文件的Java代码示例: ```...

    android 读写xml

    4. 保存XML:使用Transformer和TransformerFactory创建Transformer对象,然后调用transform()方法将Document转换为XML字符串或写入文件。 五、示例代码 以下是一个简单的XML读取和写入示例: ```java // 读取XML ...

    Android XML 解析 写入

    XML解析是将XML文件转换为应用程序可以处理的数据的过程。本篇将详细探讨Android中的XML解析,特别是PULL解析方式,并讲解如何进行XML的写入操作。 ### 1. Android XML解析概述 XML解析器分为两种主要类型:DOM...

    android XML三种解析及生成

    本文将深入探讨Android中的三种XML解析方式:SAX(Simple API for XML)、Pull Parser和DOM(Document Object Model),以及如何生成XML文件。 ### 1. SAX解析 SAX解析器是基于事件驱动的解析模型,它逐行读取XML...

    使用XStream, java Object 与xml之间的转换,以及写入SD卡

    此外,从Android 10(API级别29)开始,推荐使用`getExternalFilesDir()`或`getExternalCacheDir()`等方法来保存应用私有的文件,而不是直接写入SD卡根目录。 总之,XStream提供了一种直观且易于使用的机制来处理...

    Android review xml 解析 生成

    在Android开发中,XML文件广泛用于存储数据、配置和用户界面布局。XML解析是将XML数据转换为程序可处理的数据结构的关键步骤。本篇将深入探讨Android中的XML解析,包括DOM解析、SAX解析和Pull解析,以及如何生成XML...

    Android中xml解析

    5. 反序列化XML:从XML字符串中恢复Java对象,如`YourObject obj = (YourObject) xstream.fromXML(xml);` 6. 文件操作:将XML写入或读出文件,使用标准的文件I/O操作。 总结,XML解析在Android开发中扮演着重要...

    安卓Android源码——比较通用的xml解析方法.rar

    在实际开发中,为了提高效率和便捷性,开发者常选择第三方库,如Gson、Jackson、FastXml(OkHttp的Okio库)等,它们提供了更高级别的API,能快速将XML转换为Java对象。 7. JSON与XML的互转 在某些场景下,可能需要...

    SAX--XML文件读写

    在Android开发中,由于内存限制和性能优化的需求,通常会选择SAX(Simple API for XML)解析器来读取XML文件,而非DOM(Document Object Model)解析器,因为SAX是基于事件驱动的,它按需逐个处理XML元素,占用内存...

    android中的xml解析

    XML解析是将XML文档转换为程序可以理解的形式的过程,这在Android应用程序中至关重要,因为许多配置文件、布局文件以及数据传输都依赖于XML。本教程将深入探讨在Android中使用SAX(Simple API for XML)和DOM...

Global site tag (gtag.js) - Google Analytics