首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

Android采取SAX解析xml文件

2012-07-27 
Android采用SAX解析xml文件对xml进行可以采用DOM、SAX、PULL进行解析,项目中采用的是SAX进行解析xml文件。写

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("写入成功!");}

?
?

热点排行