Android使用Pull解析器解析XML文件

Pull简介

   1.常见的XML解析方式有三种,DOM、SAX、Pull,Android系统中推荐使用Pull

   2.Pull解析器是一个开源的Java项目,Android系统内部解析XML文件均为此种方式,也可用于JavaEE项目

   3.Android SDK中已经集成了Pull解析器,无需添加任何jar文件

   4.Pull解析器运行方式与SAX类似,提供各种事件的判断

   5.官方网站:http://xmlpull.org/

使用Pull解析器解析XML文件

  1.  Xml.newPullParser() 获得解析器

  2  parser.setInput(in, "UTF-8") 设置输入流以及编码

  3. parser.next() 获取下一个解析事件,得到一个事件代码

  4. XmlPullParser中定义了常量来标识各种解析事件

      START_DOCUMENT、END_DOCUMENT 、START_TAG 、END_TAG 、TEXT

示例:

	/**
	 * 接收一个XML文件输入流, 从输入流中读所有User节点, 将数据封装成对象装入List返回
	 * @param in XML文件的输入流
	 * @return User对象的集合
	 * @throws Exception 
	 */
	public List<User> findAll(InputStream in) throws Exception {
		// 获取Pull解析器
		XmlPullParser parser = Xml.newPullParser();
		// 解析器加载输入流
		parser.setInput(in, "UTF-8");

		List<User> list = new ArrayList<User>();
		User user = null;
		for (int event = parser.getEventType(); event != XmlPullParser.END_DOCUMENT; event = parser.next())
			switch (event) {
				case XmlPullParser.START_TAG:
					if ("user".equals(parser.getName())) {
						user = new User();
						String id = parser.getAttributeValue(0);
						user.setId(new Integer(id));
						list.add(user);
					} else if ("name".equals(parser.getName())) {
						String name = parser.nextText();
						user.setName(name);
					} else if ("age".equals(parser.getName())) {
						String age = parser.nextText();
						user.setAge(new Integer(age));
					}
			}

		return list;
	}

使用XmlSerializer写出XML

    使用以下方法生成XML,和XML文档顺序类似

startDocument

startTag

attribute

text

endTag

endDocument

	/**
	 * 使用XmlSerializer写出XML
	 * @param users User集合
	 * @param out 输出流
	 * @throws IOException
	 */
	public void saveAllByXmlSerializer(List<User> users, OutputStream out) throws IOException {
		XmlSerializer serializer = Xml.newSerializer();
		serializer.setOutput(out, "UTF-8");

		serializer.startDocument("UTF-8", true);
		serializer.startTag(null, "users");

		for (User user : users) {
			serializer.startTag(null, "user");
			serializer.attribute(null, "id", user.getId().toString());

			serializer.startTag(null, "name");
			serializer.text(user.getName());
			serializer.endTag(null, "name");

			serializer.startTag(null, "age");
			serializer.text(user.getAge().toString());
			serializer.endTag(null, "age");

			serializer.endTag(null, "user");
		}

		serializer.endTag(null, "users");
		serializer.endDocument();
	}


用StringBuilder写出XML文件

以下是自己拼接的而成的,如果里边有特殊符号的话就不太好做

	/**
	 * 将若干User用XML形式描述, 输出到指定输出流
	 * @param users User集合
	 * @param out 输出流
	 * @throws IOException 
	 */
	public void saveAll(List<User> users, OutputStream out) throws IOException {
		StringBuilder sb = new StringBuilder();
		sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
		sb.append("<users>");
		for (User user : users) {
			sb.append("<user id=\"" + user.getId() + "\">");
			sb.append("<name>" + user.getName() + "</name>");
			sb.append("<age>" + user.getAge() + "</age>");
			sb.append("</user>");
		}
		sb.append("</users>");
		out.write(sb.toString().getBytes());
		out.close();
	}

你可能感兴趣的:(exception,xml,android,user,null,Integer)