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"中,可能演示了如何创建自定义对象,使用Pull解析器读取XML文件,将数据填充到对象列表,然后使用类似Gson或自定义的方法将对象列表序列化回XML文件。 **代码示例** ```java ...
DOM解析是一种将XML文件转换为内存中对象模型的方法。它将XML文档视为一棵树,其中每个元素、属性和文本节点都是树上的一个节点。通过遍历这个树,可以轻松地访问和修改XML数据。 ### 2. Android中的DOM解析库 在...
在Android中,转换XML到JSON主要有两种方法: 1. **使用内置的Java库:** Android SDK本身并不直接提供XML到JSON的转换功能,但可以利用Java的标准库如`javax.xml.parsers.DocumentBuilderFactory`解析XML,然后...
本文将深入探讨两种主要的XML文件生成方法:SAX(Simple API for XML)和DOM(Document Object Model),并结合Android环境进行详细阐述。 首先,我们来看SAX解析器。SAX是一种事件驱动的解析器,它不会一次性加载...
对于特定的需求,开发者还可以选择使用第三方库,如FastXml(Jackson的XML模块)或Gson,它们提供了将XML转换为Java对象或JSON的方便方法。 6. **XML示例文件(xmlDemon)** 压缩包中的`xmlDemon`可能是用来演示XML...
* XmlSerializer 是 Android 中的一种内置序列化器,它可以将 Java 对象转换为 XML 文件。 * DocumentBuilderFactory 是 Java 中的一种 DocumentBuilderFactory,它可以将 Java 对象转换为 XML 文件。 使用 ...
Android的LayoutInflater服务负责将这些布局XML转换为View对象层次结构。 2. **AndroidManifest.xml**:这是每个Android应用的核心配置文件,包含了应用的元数据、权限声明、活动、服务、广播接收器等。Android系统...
`Transformer`类用于将`Document`对象转换为XML文件。 总结起来,Android提供了DOM和SAX两种解析XML的方法,以及基于`javax.xml`库的XML生成机制。开发者可以根据实际需求和性能考虑选择合适的解析和生成方式。对于...
AndroidXstream是针对Android平台的一个库,它提供了方便的方式来处理XML序列化和反序列化,即把Java对象转换为XML字符串,或者从XML字符串恢复为Java对象。这篇内容将详细讲解AndroidXstream如何解决XML与对象转换...
在Android开发中,尤其是在处理数据存储或网络通信时,XML转换是常见的需求。AndroidXstream库简化了这个过程,减少了手动编写解析代码的工作量。 XStream的核心功能在于它的两个主要方法:`toXML()`和`fromXML()`....
我们的目标是从这个XML文件中读取数据并将其转换为Java对象。 #### 二、DOM解析实现 为了解析这个XML文件,我们将使用DOM(Document Object Model)解析器。下面是一段使用DOM解析XML文件的Java代码示例: ```...
4. 保存XML:使用Transformer和TransformerFactory创建Transformer对象,然后调用transform()方法将Document转换为XML字符串或写入文件。 五、示例代码 以下是一个简单的XML读取和写入示例: ```java // 读取XML ...
XML解析是将XML文件转换为应用程序可以处理的数据的过程。本篇将详细探讨Android中的XML解析,特别是PULL解析方式,并讲解如何进行XML的写入操作。 ### 1. Android XML解析概述 XML解析器分为两种主要类型:DOM...
本文将深入探讨Android中的三种XML解析方式:SAX(Simple API for XML)、Pull Parser和DOM(Document Object Model),以及如何生成XML文件。 ### 1. SAX解析 SAX解析器是基于事件驱动的解析模型,它逐行读取XML...
此外,从Android 10(API级别29)开始,推荐使用`getExternalFilesDir()`或`getExternalCacheDir()`等方法来保存应用私有的文件,而不是直接写入SD卡根目录。 总之,XStream提供了一种直观且易于使用的机制来处理...
在Android开发中,XML文件广泛用于存储数据、配置和用户界面布局。XML解析是将XML数据转换为程序可处理的数据结构的关键步骤。本篇将深入探讨Android中的XML解析,包括DOM解析、SAX解析和Pull解析,以及如何生成XML...
5. 反序列化XML:从XML字符串中恢复Java对象,如`YourObject obj = (YourObject) xstream.fromXML(xml);` 6. 文件操作:将XML写入或读出文件,使用标准的文件I/O操作。 总结,XML解析在Android开发中扮演着重要...
在实际开发中,为了提高效率和便捷性,开发者常选择第三方库,如Gson、Jackson、FastXml(OkHttp的Okio库)等,它们提供了更高级别的API,能快速将XML转换为Java对象。 7. JSON与XML的互转 在某些场景下,可能需要...
在Android开发中,由于内存限制和性能优化的需求,通常会选择SAX(Simple API for XML)解析器来读取XML文件,而非DOM(Document Object Model)解析器,因为SAX是基于事件驱动的,它按需逐个处理XML元素,占用内存...
XML解析是将XML文档转换为程序可以理解的形式的过程,这在Android应用程序中至关重要,因为许多配置文件、布局文件以及数据传输都依赖于XML。本教程将深入探讨在Android中使用SAX(Simple API for XML)和DOM...