`
lengrenhanbing
  • 浏览: 48063 次
  • 性别: 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("写入成功!");	
}

 
 

分享到:
评论

相关推荐

    android 使用Sax解析XML 源码实例

    下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...

    android使用SAX解析xml

    - `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...

    Sax解析xml文件

    以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...

    [Android]使用SAX解析XML文件

    以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...

    Android之SAX解析XML

    本文将深入探讨如何在Android环境中使用SAX(Simple API for XML)解析XML文件。SAX是一种事件驱动的解析器,它在读取XML文档时触发一系列事件,开发者可以注册事件处理器来处理这些事件,从而实现对XML数据的高效、...

    android 使用sax解析XML

    本教程将详细讲解如何在Android中使用SAX解析XML。 首先,要使用SAX解析XML,我们需要理解其工作原理。SAX解析器会逐个读取XML文档的元素,每当遇到文档的开始、结束、文本等事件时,就会触发相应的回调方法。...

    android使用SAX解析XML

    总结起来,Android中使用SAX解析XML的优点在于其低内存占用和高效的性能,适合处理大型XML文档。通过创建自定义的ContentHandler并重写其方法,我们可以根据XML的结构来解析和处理数据。不过,SAX解析不适用于需要...

    android sax解析xml模板源码下载

    本示例"android sax解析xml模板源码"提供了一个使用SAX解析XML的实例,方便开发者直接导入到自己的项目中使用。 SAX解析XML的基本流程如下: 1. **创建解析器**:在Android中,我们需要使用`SAXParserFactory`来...

    android sax解析xml

    本篇将详细讲解如何在Android环境中使用SAX解析XML。 1. **SAX解析的基本原理** SAX解析器读取XML文档时,遇到每个元素、属性、文本等都会触发相应的事件,开发者需要注册事件处理器来处理这些事件。这种方式适合...

    android sax解析xml文件

    以下是一个简单的SAX解析XML文件的Android实例源码: ```java import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class SaxExample extends ...

    Android 创建与解析XML Sax方式

    Android中解析XML文件SAX方式 SAX解析器会触发一系列的事件,如开始文档、开始元素、结束元素等,开发者需要通过实现`DefaultHandler`或自定义的`ContentHandler`来处理这些事件。以下是一个基本的SAX解析器使用...

    Android SAX 解析XML

    下面详细介绍Android中使用SAX解析XML的关键步骤和相关知识点: 1. 引入库:在Android项目中,SAX解析器已经内置于`org.xml.sax`包中,无需额外导入库。 2. 创建事件处理器:你需要创建一个类来实现`...

    Android中SAX解析XML的demo

    Android中SAX解析XML的demo

    SAX解析xml文件源码

    下面将详细介绍SAX解析XML文件的基本原理、工作流程以及在Android环境下如何实现。 **SAX解析的基本原理:** SAX解析器在读取XML文档时会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素、字符数据等...

    android SAX解析String类型 XML 字符串

    "SAX解析String类型XML字符串"就是一种高效且节省内存的方式去解析XML数据,特别是当XML文件较大时,SAX解析器优于DOM解析器,因为它不需要一次性加载整个XML到内存中。下面我们将深入探讨这一主题。 首先,XML...

    Android中使用sax解析xml文件的方法

    首先,让我们了解一下SAX解析XML的基本流程。当SAX解析器读取XML文件时,它会按照文档顺序触发一系列事件,这些事件对应于ContentHandler接口中定义的方法。以下是ContentHandler接口的一些关键方法: 1. `start...

    Android SAX、DOM、Pull解析xml文件案例讲解

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在移动应用开发,如Android中,解析XML文件是常见的任务。本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)...

    android SAX PULL 解析XML文件 代码 详解

    SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...

    android下解析xml文件的demo

    本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...

    Android PULL SAX解析XML

    在Android项目中,通常不需要额外添加依赖,因为Android SDK已经内置了SAX解析器。 2. 创建解析器事件监听器 创建一个继承自`DefaultHandler`的类,重写其中的回调方法,例如`startElement`、`endElement`和`...

Global site tag (gtag.js) - Google Analytics