一 XML 介绍
XML(Extensible Markup Language), 可扩展语言。
XML 的设计是为了传输和存储数据,焦点是数据的内容。
XML 的结构如下:
1) XML 声明
XML 总是以一个XML声明来开始,位于文档的第一行。
它指明了XML 的版本和编码方式。
如以下, 版本号为1.0, 编码方式为utf-8。
<?xml version="1.0" encoding="utf-8"?>
2) 元素
XML 必须有一个根元素。比如 android 布局文件的根元素就是布局方式。
XML 的元素有以下4种:
1) 空元素
如:<strdent />
2) 带属性的空元素
如: <student name:"zhang" age="20"/>
3)带有内容的元素
如 :
<student >
<name>zhang</name>
<age>20</age>
</student>
4) 带有内容和属性的元素
<student
name="zhang">
<age>20</age>
</student>
3 注释
XML 的注释方式如下:
<!-- This is a comment -->
二 XML 的解析
这里主要介绍一下SAX 方式解析 XML。
SAX主要方法位于org.xml.sax包。
事件源是XMLReader,它用parser()方法来解析XML 文档。
事件处理器是org.xml.sax包中的ContentHandler,DTDHandler,ErrorHandler,EntityResolver。
为了方便程序的编写。 SDK 提供了DefaultHandler 继承了以上的事件处理器。
1. 获得XMLReader, 并解析文件
SAXParserFactory spfactory = SAXParserFactory.newInstance();
SAXParser saxParser = spfactory.newSAXParser();
XMLReader xmlReader = saxParser.getXMLReader();
xmlReader.setContentHandler(new DefaultHandler);
InputSource source = new InputSource(new StringReader(XMLFILE));
xmlReader.parse(source);
2. 实现DefaultHandler
要实现XML 的解析, 必须重写DefaultHandler
public class DefaultHandler
implements EntityResolver, DTDHandler, ContentHandler, ErrorHandler
{
//开始解析文档
public void startDocument ()
throws SAXException
{
// no op
}
//文档解析结束
public void endDocument ()
throws SAXException
{
// no op
}
//开始解析节点
public void startElement (String uri, String localName,
String qName, Attributes attributes)
throws SAXException
{
// no op
}
//结束解析节点
public void endElement (String uri, String localName, String qName)
throws SAXException
{
// no op
}
//保存节点内容,ch[] 为节点内容,start 为节点开始,length 为节点内容长度
public void characters (char ch[], int start, int length)
throws SAXException
{
// no op
}
}
XML 的解析通常需要根据XML 预先定义的元素结构建立 元素类。
在 characters (char ch[], int start, int length) 中保存到元素类。