加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用pull解析xml文件

发布时间:2020-12-16 00:18:39 所属栏目:百科 来源:网络整理
导读:老罗视频学习笔记。 sax和pull是android常用的两种解析xml文件的方式,但是pull更常用,以为代码量小很多。 pull有五个常用的属性: START_DOCUMENT:文档开始,相当于persons START_TAG:节点开始,相当于person TEXT: END_TAG:节点结束,相当于/person END_

老罗视频学习笔记。


sax和pull是android常用的两种解析xml文件的方式,但是pull更常用,以为代码量小很多。

pull有五个常用的属性:

START_DOCUMENT:文档开始,相当于<persons>

START_TAG:节点开始,相当于<person>

TEXT:

END_TAG:节点结束,相当于</person>

END_DOCUMENT:文档结束,相当于</persons>

要解析的服务器端的xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="23">
		<name>李老师</name>
		<age>23</age>
	</person>
	<person id = "24">
		<name>张老师</name>
		<age>26</age>
	</person>
</persons>

一.客户端。

新建一个java project。

因为pull不是系统自带的,要使用pull解析,需要网上下载第三方pull解析器,本例使用kxml2-2.2.2.jar包

1)新建一个person类,用来存储person属性。

2)新建一个PullXmlParser类,添加parserXML函数,用来解析xml文件,并存入到list中,list中存入的是person类对象。

3)HttpUtils类,使用http的get方式从服务器获取xml的IO流。具体使用上一节sax方式解析xml的httpUtils文件即可。

4)测试类。

person.java内容如下:

public class person {

	public person() {
		// TODO Auto-generated constructor stub
	}
	//成员变量
	private String name = null;
	private int id = 0;
	private int age = 0;
	//有参构造函数
	public person(String name,int id,int age) {
		super();
		this.name = name;
		this.id = id;
		this.age = age;
	}

	//get函数
	public String getName() {
		return name;
	}
	//set函数
	public void setName(String name) {
		this.name = name;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	//toString()函数
	@Override
	public String toString() {
		return "person [name=" + name + ",id=" + id + ",age=" + age + "]";
	}
	
	
}

PullXmlParser.java内容如下,pull核心:
public class PullXmlTools {

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

	/**
	 * 想要给函数添加类似于这样的注释,可以在上方输入“/**”,然后点击回车即可
	 * @param inputStream从服务器获取xml,以流的方式返回
	 * @param encode
	 * @return
	 */
	public static List<person> parseXML(InputStream inputStream,String encode){ 
		
		List<person>list = null;
		//装载解析每一个person节点的内容
		person personPerson = null;
		
		//创建一个xml解析的工厂
		try {
			XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
			//获得xml解析类的引用
			XmlPullParser parser = factory.newPullParser();
			parser.setInput(inputStream,encode);
			//获得事件的类型
			int eventType = parser.getEventType();
			//如果当前节点获得的事件类型不是文件结束符时
			//END_DECUMENT类似于</persons>
			while (eventType!=XmlPullParser.END_DOCUMENT) {
				switch (eventType) {
				//相当于<persons>
				case XmlPullParser.START_DOCUMENT:
					list = new ArrayList<person>();
					break;
					//相当于<person>
				case XmlPullParser.START_TAG:
					
					if("person".equals(parser.getName())){
						personPerson = new person();
						//取出属性值
						//getAttributeName(0)意思是第一个属性值
						//System.out.print(parser.getAttributeName(0));这个获取的是"id"
						int id = Integer.parseInt(parser.getAttributeValue(0));
						personPerson.setId(id);
						
					}else if ("name".equals(parser.getName())) {
						String name = parser.nextText();
						personPerson.setName(name);
						
					}else if ("age".equals(parser.getName())) {
						int age = Integer.parseInt(parser.nextText());
						personPerson.setAge(age);
						
					}
					break;
					//相当于</person>
				case XmlPullParser.END_TAG:
					if("person".equals(parser.getName())){
						list.add(personPerson);
						//解析到</person>后,要重新执行下一个<person>,在START_TAG下会重新new一个person对象出来
						personPerson = null;
					}
					
					break;
		
				}
				eventType = parser.next();
			}
			return list;
		} catch (XmlPullParserException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
		
		
	}
	
	
}


HttpUtils.java从上一节sax解析xml文件拷贝即可。


test.java文件内容如下:和上一节内容类似:

public static void main(String[] args) {
		
		String pathString = "http://localhost:8080/myhttp/person.xml";
		//从服务器中获取InputStream流
		InputStream  inputStream = HttpUtils.getXML(pathString);
		try {
			//把获取到的inputstream流存入list中
			List<person> list = PullXmlTools.parseXML(inputStream,"utf-8");
			//循环输出
			for(person person : list) {
				System.out.println(person.toString());
			}
		
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

输出结果如下:


(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读