对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("写入成功!");
}
分享到:
相关推荐
下面是一个SAX解析XML的示例(有点长,因为详细注解了SAX事件处理的所有方法),SAX API中主要有四种处理事件的接口,它们分别是ContentHandler,DTDHandler, EntityResolver 和 ErrorHandler 。下面的例子可能...
- `xmlSAXPaserDemo`可能是一个包含示例代码的Android项目,用于演示如何实际使用SAX解析XML文件。 - 项目中可能包括网络请求模块、SAX解析器处理类以及展示解析结果的UI部分。 通过以上步骤,开发者可以在...
以下是一个使用SAX解析XML文件的基本步骤: 1. **创建解析器**: 首先,我们需要创建一个SAX解析器实例。在Java中,这通常通过`SAXParserFactory`类完成。设置解析器属性,然后调用`newSAXParser()`方法获取`...
以下是使用SAX解析XML文件的步骤: 1. 引入依赖:在Android项目中,通常需要添加`xmlpull`库,它包含了SAX解析器。可以在`build.gradle`文件中添加依赖: ``` implementation 'xpp3:xpp3:1.1.4c' ``` 2. 创建...
本文将深入探讨如何在Android环境中使用SAX(Simple API for XML)解析XML文件。SAX是一种事件驱动的解析器,它在读取XML文档时触发一系列事件,开发者可以注册事件处理器来处理这些事件,从而实现对XML数据的高效、...
本教程将详细讲解如何在Android中使用SAX解析XML。 首先,要使用SAX解析XML,我们需要理解其工作原理。SAX解析器会逐个读取XML文档的元素,每当遇到文档的开始、结束、文本等事件时,就会触发相应的回调方法。...
总结起来,Android中使用SAX解析XML的优点在于其低内存占用和高效的性能,适合处理大型XML文档。通过创建自定义的ContentHandler并重写其方法,我们可以根据XML的结构来解析和处理数据。不过,SAX解析不适用于需要...
本示例"android sax解析xml模板源码"提供了一个使用SAX解析XML的实例,方便开发者直接导入到自己的项目中使用。 SAX解析XML的基本流程如下: 1. **创建解析器**:在Android中,我们需要使用`SAXParserFactory`来...
本篇将详细讲解如何在Android环境中使用SAX解析XML。 1. **SAX解析的基本原理** 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方式 SAX解析器会触发一系列的事件,如开始文档、开始元素、结束元素等,开发者需要通过实现`DefaultHandler`或自定义的`ContentHandler`来处理这些事件。以下是一个基本的SAX解析器使用...
下面详细介绍Android中使用SAX解析XML的关键步骤和相关知识点: 1. 引入库:在Android项目中,SAX解析器已经内置于`org.xml.sax`包中,无需额外导入库。 2. 创建事件处理器:你需要创建一个类来实现`...
Android中SAX解析XML的demo
下面将详细介绍SAX解析XML文件的基本原理、工作流程以及在Android环境下如何实现。 **SAX解析的基本原理:** SAX解析器在读取XML文档时会触发一系列的事件,如开始文档、结束文档、开始元素、结束元素、字符数据等...
"SAX解析String类型XML字符串"就是一种高效且节省内存的方式去解析XML数据,特别是当XML文件较大时,SAX解析器优于DOM解析器,因为它不需要一次性加载整个XML到内存中。下面我们将深入探讨这一主题。 首先,XML...
首先,让我们了解一下SAX解析XML的基本流程。当SAX解析器读取XML文件时,它会按照文档顺序触发一系列事件,这些事件对应于ContentHandler接口中定义的方法。以下是ContentHandler接口的一些关键方法: 1. `start...
XML(eXtensible Markup Language)是一种用于存储和传输数据的标准格式,特别是在移动应用开发,如Android中,解析XML文件是常见的任务。本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)...
SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...
本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...
在Android项目中,通常不需要额外添加依赖,因为Android SDK已经内置了SAX解析器。 2. 创建解析器事件监听器 创建一个继承自`DefaultHandler`的类,重写其中的回调方法,例如`startElement`、`endElement`和`...