Android使用pull解析xml

本文介绍了一个使用Java实现的Pull解析器,通过HttpUtils类获取XML文件流,再利用PullXMLTools类进行解析,并展示了完整的测试过程。
一个实体类person
package com.pull.domain;

public class Person {

	private int id;
	private String name;
	private int age;

	public int getId() {
		return id;
	}

	public Person(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Person() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

}

一个HttpUtils

package com.pull.http;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtils {

	/**
	 * 从服务器获得xml文件返回流
	 * @param path
	 * @return
	 */
	public static InputStream getXML(String path) {
		InputStream inputStream = null;
		try {
			URL url = new URL(path);
			if (url != null) {
				HttpURLConnection connection = (HttpURLConnection) url
						.openConnection();
				connection.setConnectTimeout(3000);
				connection.setDoInput(true);
				connection.setRequestMethod("GET");
				int code = connection.getResponseCode();
				if (code == 200) {
					inputStream = connection.getInputStream();
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return inputStream;
	}
}

PullXMLTools类

package com.pull.parser;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import com.pull.domain.Person;

/**
 * 主要是使用PULL解析xml
 * 
 * @author jack
 * 
 */
public class PullXMLTools {

	public PullXMLTools() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param inputStream
	 *            从服务器获取xml文件,以流的形式返回
	 * @param encode
	 *            编码格式
	 * @return
	 * @throws Exception
	 */
	public static List<Person> parseXML(InputStream inputStream, String encode)
			throws Exception {
		List<Person> list = null;
		Person person = null;// 装载解析每一个person节点的内容
		// 创建一个xml解析的工厂
		XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
		// 获得xml解析类的引用
		XmlPullParser parser = factory.newPullParser();
		parser.setInput(inputStream, encode);
		// 获得事件的类型
		int eventType = parser.getEventType();
		while (eventType != XmlPullParser.END_DOCUMENT) {
			switch (eventType) {
			case XmlPullParser.START_DOCUMENT:
				list = new ArrayList<Person>();
				break;
			case XmlPullParser.START_TAG:
				if ("person".equals(parser.getName())) {
					person = new Person();
					// 取出属性值
//					parser
//					int id = Integer.parseInt(parser.getAttributeValue(0));
//					person.setId(id);
				}else if ("id".equals(parser.getName())) {
					int id = Integer.parseInt(parser.nextText());
					person.setId(id);
				} 
				else if ("name".equals(parser.getName())) {
					String name = parser.nextText();// 获取该节点的内容
					person.setName(name);
				} else if ("age".equals(parser.getName())) {
					int age = Integer.parseInt(parser.nextText());
					person.setAge(age);
				}
				break;
			case XmlPullParser.END_TAG:
				if ("person".equals(parser.getName())) {
					list.add(person);
					person = null;
				}
				break;
			}
			eventType = parser.next();
		}
		return list;
	}

}

测试类

package com.pull.test;

import java.io.InputStream;
import java.util.List;

import com.pull.domain.Person;
import com.pull.http.HttpUtils;
import com.pull.parser.PullXMLTools;

public class Test {

	public Test() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String path = "http://localhost:8080/person.xml";
		InputStream inputStream = HttpUtils.getXML(path);
		List<Person> list = null;
		try {
			list = PullXMLTools.parseXML(inputStream, "gbk");
			for (Person person : list) {
				System.out.println(person.toString());
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}
tomcat里的xml文件

<?xml version="1.0" encoding="GBK"?>
<persons>
	<person>
		<id>23</id>
		<name>张三</name>
		<age>30</age>
	</person>
	<person>
		<id>20</id>
		<name>李四</name>
		<age>25</age>
	</person>
</persons>






内容概要:本文档介绍了基于3D FDTD(时域有限差分)方法在MATLAB平台上对微带线馈电的矩形天线进行仿真分析的技术方案,重点在于模拟超MATLAB基于3D FDTD的微带线馈矩形天线分析[用于模拟超宽带脉冲通过线馈矩形天线的传播,以计算微带结构的回波损耗参数]宽带脉冲信号通过天线结构的传播过程,并计算微带结构的回波损耗参数(S11),以评估天线的匹配性能和辐射特性。该方法通过建立三维电磁场模型,精确求解麦克斯韦方程组,适用于高频电磁仿真,能够有效分析天线在宽频带内的响应特性。文档还提及该资源属于一个涵盖多个科研方向的综合性MATLAB仿真资源包,涉及通信、信号处理、电力系统、机器学习等多个领域。; 适合人群:具备电磁场与微波技术基础知识,熟悉MATLAB编程及数值仿真的高校研究生、科研人员及通信工程领域技术人员。; 使用场景及目标:① 掌握3D FDTD方法在天线仿真中的具体实现流程;② 分析微带天线的回波损耗特性,优化天线设计参数以提升宽带匹配性能;③ 学习复杂电磁问题的数值建模与仿真技巧,拓展在射频与无线通信领域的研究能力。; 阅读建议:建议读者结合电磁理论基础,仔细理解FDTD算法的离散化过程和边界条件设置,运行并调试提供的MATLAB代码,通过调整天线几何尺寸和材料参数观察回波损耗曲线的变化,从而深入掌握仿真原理与工程应用方法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值