zoukankan      html  css  js  c++  java
  • Android数据存储---Pull解析Xml文件

    有如下xml文件:

    <?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
    <persons>
    	<person id="1">
    		<name>范冰冰</name>
    		<age>31</age>
    	</person>
    	<person id="2">
    		<name>林志玲</name>
    		<age>38</age>
    	</person>
    	<person id="3">
    		<name>杨幂</name>
    		<age>26</age>
    	</person>
    </persons>


    1.使用XmlPullParser读取xml文件:

    	public List<Person> loadPersons(InputStream in) throws Exception {
    		
    		XmlPullParser parser = Xml.newPullParser();		// 获取解析器
    		parser.setInput(in, "UTF-8");							// 设置输入流, 指定码表
    		
    		ArrayList<Person> persons = new ArrayList<Person>();
    		Person p = null;
    		// 最初type赋值为第一个事件, 只要不是文档结束就循环, 每次循环后解析下一个事件
    		for (int type = parser.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parser.next()) {
    			if (type == XmlPullParser.START_TAG) {				// 如果遇到了标签开始事件
    				if (parser.getName().equals("person")) {			// 如果标签名为"person"
    					p = new Person();										// 创建对象
    					String id = parser.getAttributeValue(0);		// 获取第一个属性的属性值
    					p.setId(Integer.parseInt(id));						// 转为int, 设置id
    					persons.add(p);											// 装入集合
    				} else if (parser.getName().equals("name")) {	// 如果标签名为"name"
    					String name = parser.nextText();					// 获取下一个文本
    					p.setName(name);										// 设置name
    				} else if (parser.getName().equals("age")) {		// 如果标签名为"age"
    					String age = parser.nextText();					// 获取下一个文本
    					p.setAge(Integer.parseInt(age));					// 设置age
    				}
    			} 
    		}
    		
    		return persons;
    	}



    2.使用XmlPullParser保存数据到xml文件

    public void savePersons(List<Person> persons, OutputStream out) throws IOException {
    		XmlSerializer serializer = Xml.newSerializer();		// 获取序列化工具
    		serializer.setOutput(out, "UTF-8");					// 设置输出流, 指定码表
    		
    		//Standalone属性是可选项,表示xml文档是否需要引用其他文件。取值为yes表示不引用,no表示引用,缺省值为no
    		serializer.startDocument("UTF-8", true);	// 开始文档,设置编码方式  和   Standalone值
    		serializer.startTag(null, "persons");		// 开始标签
    		
    		for (Person p : persons) {
    			serializer.startTag(null, "person");
    			serializer.attribute(null, "id", p.getId().toString());		// 设置属性
    			
    			serializer.startTag(null, "name");
    			serializer.text(p.getName());			// 设置文本
    			serializer.endTag(null, "name");
    			
    			serializer.startTag(null, "age");
    			serializer.text(p.getAge().toString());
    			serializer.endTag(null, "age");
    			
    			serializer.endTag(null, "person");
    		}
    		
    		serializer.endTag(null, "persons");			// 结束标签
    		serializer.endDocument();					// 结束文档
    	}


    3.Test类

    public class PersonTest extends AndroidTestCase {
    
    	public void testLoad() throws Exception {
    		PersonService service = new PersonService();
    		
    		//读取xml文件,person.xml在src目录下
    		InputStream in = PersonTest.class.getClassLoader().getResourceAsStream("persons.xml");
    		List<Person> persons = service.loadPersons(in);
    		for (Person p : persons) 
    			System.out.println(p);
    		
    		//保存数据到xml文件中
    		Person p = new Person(4, "张红", 18);
    		persons.add(p);
    		service.savePersons(persons, new FileOutputStream("/mnt/sdcard/persons.xml"));
    	}
    	
    }



  • 相关阅读:
    c++11 standardized memory model 内存模型
    C++和C API调用
    c+11 std::condition_variable and mutex
    Linux thread process and kernel mode and user mode page table
    c++ Initialization
    c++11 perfect forwarding
    C++11 template parameter deduction
    Cache缓存设计
    c++11 enable_shared_from_this
    大数相乘
  • 原文地址:https://www.cnblogs.com/fzll/p/3954621.html
Copyright © 2011-2022 走看看