Android--XML文件解析(SAX)



Xml数据原型为:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>李明</name>
<age>30</age>
</person>
<person id="20">
<name>李向梅</name>
<age>25</age>
</person>
</persons>
--------------------------------------------------》
1. 编写XML解析类
package cn.android.util;

import java.util.ArrayList;
import java.util.List;

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

import cn.android.domain.Person;

/**
* 继承DefaultHandler类
* 用于解析XML文档的解析类
* @author Administrator
*
* 2010-6-28 下午07:51:20
*/
public class XmlParser extends DefaultHandler{

//此处将XML里的数据封装成Person类,personList用于装解析后的数据
private List<Person> personList = new ArrayList<Person>();
//定义一个Person引用
private Person person = null;
//定义一个标记变量,标记当前的Xml文件被解析到哪个标签
private String currentTag = null;

/**
* 返回解析后的数据,是一个对象数组
* @return
*/
public List<Person> getObjectListFromXML() {
return personList;
}


/**
* 解析XML时,当开始读到一个元素标签开始时,执行下面方法
*/
@Override
public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
//判断标签名是否为person,是的话创建一个Person对象,并将其id属性拿出来,赋值到person对象中
if("person".equals(localName)) {
person = new Person();
Integer id = new Integer(attributes.getValue(0));
person.setId(id);
}
//标记当前标签名
currentTag = localName;
}

/**
* 解析XML时,当开始读到一个文本元素时,执行下面方法
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {

//判断此文本元素是在一个 有效的标签体里面的 例:正确:<name>文本元素</name> 错误: 文本元素<name></name>

if(currentTag != null) {
//如果此文本元素为有效,则得到它的内容
String value = new String(ch, start, length);

//如果是在name标签里,则赋值给person的name属性
if("name".endsWith(currentTag)) {
person.setName(value);
}

//如果是在age标签里,则赋值给person的age属性
if("age".endsWith(currentTag)) {
person.setAge(new Short(value));
}
}
}


/**
* 解析XML时,当读到结束一个元素标签时,执行下面方法
*/
@Override
public void endElement(String uri, String localName, String name) throws SAXException {

//将当前标签名制空
currentTag = null;

//如果当前结束的标签名是person的话,代表一个person对象已经读取完毕。将其添加到list后制空
if("person".endsWith(localName)) {
personList.add(person);
person = null;
}
}


}

---------------------------------------------------------------------------------------------------------------------》
2。测试类:
package cn.android.xml;

import java.io.InputStream;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import android.test.AndroidTestCase;
import android.util.Log;
import cn.android.domain.Person;
import cn.android.util.XmlParser;

public class TestSAX extends AndroidTestCase {

public void testParse() throws Throwable {
try {
//得到SAX解析工厂
SAXParserFactory spf = SAXParserFactory.newInstance();

// 设置解析器的相关特性,http://xml.org/sax/features/namespaces = true 表示开启命名空间特性
// saxParser.setProperty("http://xml.org/sax/features/namespaces",true);
SAXParser saxParser = spf.newSAXParser(); // 创建解析器


//得到SAX解析实现类
XmlParser handler = new XmlParser();
//将xml文件以输入流的形式读入到内存中。
InputStream inStream = XmlParseActivity.class.getClassLoader().getResourceAsStream("person.xml");

//开始解析
saxParser.parse(inStream, handler);

//关闭输入留
inStream.close();

//将得到的每个对象信息写入到日志中
for(Person person : handler.getObjectListFromXML()) {
Log.i("XmlParseActivity", person.toString());
}
} catch (Exception e) {

e.printStackTrace();
}
}

}


注:域对象Person类:

package cn.android.domain;

public class Person {

private Integer id;
private String name;
private Short age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
}

@Override
public String toString() {
return id + "---" + name + "---" + age;
}
}


一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值