`
lengrenhanbing
  • 浏览: 48793 次
  • 性别: Icon_minigender_1
  • 来自: 泰安
社区版块
存档分类
最新评论

Android采用SAX解析xml文件

 
阅读更多

对xml进行可以采用DOM、SAX、PULL进行解析,项目中采用的是SAX进行解析xml文件。

写入:

创建xml文件,返回String类型,代码如下:

 

public static String writeToString(Config config) {
		// 实现xml信息序列号的一个对象
		XmlSerializer serializer = Xml.newSerializer();
		StringWriter writer = new StringWriter();
		try {
			// xml数据经过序列化后保存到String中,然后将字串通过OutputStream保存为xml文件
			serializer.setOutput(writer);
			// 文档开始
			serializer.startDocument("utf-8", true);
			// 开始一个节点
			serializer.startTag("", "configs");
			// 开始一个子节点
			serializer.startTag("", "config");
			
			serializer.startTag("", "backGroundColor");
 			serializer.text(String.valueOf(config.getBackGroundColor()));
			serializer.endTag("","backGroundColor");
			
			serializer.startTag("", "typefaceColor");
 			serializer.text(String.valueOf(config.getTypefaceColor()));
			serializer.endTag("","typefaceColor");
			
			serializer.startTag("", "keywordColor");
 			serializer.text(String.valueOf(config.getKeywordColor()));
			serializer.endTag("","keywordColor");

			serializer.startTag("", "prefixColor");
 			serializer.text(String.valueOf(config.getPrefixColor()));
			serializer.endTag("","prefixColor");
 			
			serializer.startTag("", "phoneColor");
			serializer.text(String.valueOf(config.getPhoneColor()));
 			serializer.endTag("", "phoneColor");

			serializer.startTag("", "dateColor");
 			serializer.text(String.valueOf(config.getDateColor()));
 			serializer.endTag("", "dateColor");
 			
 			serializer.startTag("", "keyword");
 			serializer.text(String.valueOf(config.getKeyword()));
 			serializer.endTag("", "keyword");
 			
 			serializer.startTag("", "city");
 			serializer.text(String.valueOf(config.getCity()));
 			serializer.endTag("", "city");

			serializer.endTag("", "config");
			serializer.endTag("", "configs");

			// 关闭文档

			serializer.endDocument();

		} catch (IllegalArgumentException e) {

			e.printStackTrace();

		} catch (IllegalStateException e) {

			e.printStackTrace();

		} catch (IOException e) {
			e.printStackTrace();

		}
		return writer.toString();
	}

 

将xml序列化后保存在String对象中,然后再写入到xml中。

解析:

     SAX是基于事件的方法,它很类似于标签库的处理机制,在标签开始、结束以及错误发生等等地方调用相应的接口实现方法,不是全部文 档都读入内存。 SAX具有优异的性能和利用更少的存储空间特点。SAX 的设计只考虑了功能的强大性,却没有考虑程序员使用起来是否方便。

使用必须扩展ContentHandler、ErrorHandler、DTDHandler等,但是必须扩展ContentHandler(或者DefaultHandler )。

public class ConfigHandler extends DefaultHandler {

	private Config config = null;
	private String preTag = null;// 作用是记录解析时的上一个节点名称

	public Config getConfig(InputStream xmlStream) throws Exception {
		SAXParserFactory factory = SAXParserFactory.newInstance();
		SAXParser parser = factory.newSAXParser();
		ConfigHandler handler = new ConfigHandler();
		parser.parse(xmlStream, handler);
		return handler.getConfig();
	}

	public Config getConfig() {
		return config;
	}

	@Override
	public void startDocument() throws SAXException {
	}

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		if ("config".equals(qName)) {
			config = new Config();
		}
		preTag = localName;// 将正在解析的节点名称赋给preTag
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException { 
		preTag = null;
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if (preTag != null) {
			String content = new String(ch, start, length);
			if ("backGroundColor".equals(preTag)) {
				config.setBackGroundColor(content);
			} else if ("typefaceColor".equals(preTag)) {
				config.setTypefaceColor(content);
			} else if ("keywordColor".equals(preTag)) {
				config.setKeywordColor(content);
			} else if ("prefixColor".equals(preTag)) {
				config.setPrefixColor(content);
			} else if ("phoneColor".equals(preTag)) {
				config.setPhoneColor(content);
			} else if ("dateColor".equals(preTag)) {
				config.setDateColor(content);
			}else if("keyword".equals(preTag)){
				config.setKeyword(content);
			}else if("city".equals(preTag)){
				config.setCity(content);
			}
		}
	}

}

 

 

 

 

Config.java ,封装数据

 

public class Config {

	 
	private String backGroundColor;
	
	private String typefaceColor;
	
	private String keywordColor;
	
	private String prefixColor;

	private String phoneColor;

	private String dateColor;

	private String keyword;
	
	private String city;
     //省略getter和setter方法    
    
}

  

 调用:

解析xml,得到config对象:

Config config = ParseConfig.parserXMl(context);

写入xml:

String xmlStr = ParseConfig.writeToString(config);
if (ParseConfig.writeToXml(this, xmlStr)) {
   System.out.println("写入成功!");	
}

 
 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics