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;}@Overridepublic void startDocument() throws SAXException {}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {if ("config".equals(qName)) {config = new Config();}preTag = localName;// 将正在解析的节点名称赋给preTag}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException { preTag = null;}@Overridepublic 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("写入成功!");}
?
?