Android 操作XML

Android 平台是一个开源移动开发平台。它允许您访问各种移动设备的所有方面,这些移动设备从低级图形设备到手机摄像头上的硬件不一而足。由于 Android 可以实现这么丰富的功能,因此您可能想知道为何还要为 XML 伤脑筋呢。并不是因为使用 XML 是多么地有趣;而是因为它能提供一些特殊的支持。XML 经常用作 Internet 上的一种数据格式。如果您希望通过 Internet 访问数据,则数据很有可能是 XML 格式。如果您希望发送数据给 Web 服务,那么您可能也需要发送 XML。简而言之,如果您的 Android 应用程序将利用 Internet,那么您可能需要使用 XML。幸运的是,您可以采用多种方法在 Android 上使用 XML。

这里只介绍pull解析,SAX和DOM解析请参考文章最后的链接。pull 解析器的运行方式与 SAX 解析器相似。它提供了类似的事件(开始元素和结束元素),但您需要使用 (parser.next() 提取它们。事件将作为数值代码被发送,因此您可以使用一个简单 case-switch。注意,解析并未像 SAX 解析那样监听元素的结束,而是在开始处完成了大部分处理。


待解析的XML文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<union>
    <person>
      <name>David</name>
      <age>23</link>
      <birthday>1990-12-25</<birthday>        
    </person>
    
    <person>
      <name>Kobe</name>
      <age>34</link>
      <birthday>1978-6-25</<birthday>        
    </person>
    
    <person>
      <name>Jay</name>
      <age>28</link>
      <birthday>1984-4-25</<birthday>        
    </person>    
</union>


示例代码

package com.xxx.xml;

import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import android.util.Xml;

public class AndroidXmlService {
	private static final String NAME = "name";
	private static final String AGE = "age";
	private static final String BIRTHDAY = "birthday";
	private static final String PERSON = "person";
	private static final String UNION = "union";
	
	//解析xml文件
	public List<Person> parse(InputStream in){
		List<Person> list = null;
		XmlPullParser parser = Xml.newPullParser();
		try {
			parser.setInput(in, "utf-8");
			// auto-detect the encoding from the stream
            //parser.setInput(in, null);
			int eventType = parser.getEventType();
			Boolean done = false;
			Person person = null;
			while (eventType != XmlPullParser.END_DOCUMENT && !done){
                String name = null;
                switch (eventType){
                    case XmlPullParser.START_DOCUMENT:
                    	list = new ArrayList<Person>();
                        break;
                    case XmlPullParser.START_TAG:
                        name = parser.getName();
                        if (name.equalsIgnoreCase(PERSON)){
                        	person = new Person();
                        } else if (person != null){
                            if (name.equalsIgnoreCase(NAME)){
                            	person.setName(parser.nextText());
                            } else if (name.equalsIgnoreCase(AGE)){
                            	person.setAge(Integer.parseInt(parser.nextText()));
                            } else if (name.equalsIgnoreCase(BIRTHDAY)){
                            	person.setBirthday(parser.nextText());
                            }  
                        }
                        break;
                    case XmlPullParser.END_TAG:
                    	name = parser.getName();
                        if (name.equalsIgnoreCase(PERSON) && person != null){
                            list.add(person);
                        } else if (name.equalsIgnoreCase(UNION)){
                            done = true;
                        }
                        break;
                }
                eventType = parser.next();
            }
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	//写出到xml文件
	public String writeXml(List<Person> list){
	    XmlSerializer serializer = Xml.newSerializer();
	    StringWriter writer = new StringWriter();
	    try {
	        serializer.setOutput(writer);
	      //<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>  
	        serializer.startDocument("UTF-8", true);
	        serializer.startTag("", "union");
	        serializer.attribute("", "number", String.valueOf(list.size()));
	        for (Person person: list){
	        	//<name>Vanuatu</name>  
	        	serializer.startTag("", NAME);  
	        	serializer.text(person.getName());  
	        	serializer.endTag("", NAME);  
	        	
	        	//<age>Vanuatu</age>  
	        	serializer.startTag("", AGE);  
	        	serializer.text(person.getAge()+"");  
	        	serializer.endTag("", AGE);  
	        	
	        	//<age>Vanuatu</age>  
	        	serializer.startTag("", BIRTHDAY);  
	        	serializer.text(person.getBirthday());  
	        	serializer.endTag("", BIRTHDAY);  
	        }
	        serializer.endTag("", "union");
	        serializer.endDocument();
	        return writer.toString();
	    } catch (Exception e) {
	        throw new RuntimeException(e);
	    } 
	}
}


详细讲解可以参考这里

https://www.ibm.com/developerworks/cn/xml/x-android/




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值