Android开发 --- SAX解析XML
来源:互联网 发布:知天气全国版 编辑:程序博客网 时间:2024/05/18 01:24
原理:顺序扫描,以事件方式处理文件信息
文档的开始结束、元素的开始结束都会触发事件。
通常 由SAXParserFactory产生SAXParser ----> SAXReader 绑定 事件处理接口
通常使用ContentHandler接口,鉴于里边的事件有的压根就用不到,采用继承org.xml.sax.helpers.DefaultHandler
并重写其中的事件处理方法
事件:
setDocumentLocator(org.xml.sax.Locator arg0);
startDocument() throws org.xml.sax.SAXException;
endDocument() throws org.xml.sax.SAXException;
startPrefixMapping() throws org.xml.sax.SAXException;
endPrefixMapping()
startElement()
endElement()
characters()
ignorableWhitespace()
processingInstruction()
skippedEntity()
解析过程:
1.创建事件处理程序
2.创建SAX解析器
3.将事件处理程序分配给解析器
4.对文档进行解析,将每个事件发送给处理程序
实例:
1. xml 文件
<?xml version="1.0" encoding="utf-8"?>
<workers>
<worker id="abc001">
<name>abc</name>
<sex>male</sex>
<age>20</age>
</worker>
<worker id="abc002">
<name>bac</name>
<sex>femal</sex>
<age>30</age>
</worker>
<worker id="abc003">
<name>cba</name>
<sex>male</sex>
<age>25</age>
</worker>
<worker id="abc004">
<name>bca</name>
<sex>male</sex>
<age>18</age>
</worker>
</workers>
2. 继承DefaultHandler
public class MyContentHandler extends DefaultHandler {
String hisname, sex, age;
String tagName;
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(tagName.equals("name")) {
hisname = new String(ch, start, length);
} else if(tagName.equals("sex")) {
sex = new String(ch, start, length);
} else if(tagName.equals("age")) {
age = new String(ch, start, length);
}
}
@Override
public void endDocument() throws SAXException {
System.out.println("------------ end ----------");
}
@Override //worker元素结束打印
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (localName.equals("worker")) {
printOut();
}
}
@Override
public void startDocument() throws SAXException {
System.out.println("----------- begin ----------");
}
@Override //元素开始
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
tagName = localName;
if (localName.equals("worker")) {
for (int i = 0; i < attributes.getLength(); i++) {
System.out.println(attributes.getLocalName(i) + "="
+ attributes.getValue(i));
}
}
}
public void printOut() {
System.out.println("name=" + hisname);
System.out.println("sex=" + sex);
System.out.println("age=" + age);
}
}
3.Activity中按钮单击事件解析xml
class DownloadOnclickeListener implements OnClickListener {
@Override
public void onClick(View v) {
HttpDownLoader hd = new HttpDownLoader();
String tempString = hd.downLoadText("http://cdccn.cn:8080/test/work.xml");
System.out.println(tempString);
try {
SAXParserFactory sf = SAXParserFactory.newInstance(); //获得工厂
XMLReader xmlReader = sf.newSAXParser().getXMLReader(); //获得XMLReader
xmlReader.setContentHandler(new MyContentHandler()); //将reader绑定到自定义的handler
xmlReader.parse(new InputSource(new StringReader(tempString))); //开始解析 其中 tempString是获取的xml文件
} catch (Exception e) {
e.printStackTrace();
}
}
}
- Android开发 --- SAX解析XML
- android开发之sax解析xml文档
- Android开发--详解SAX解析XML文件
- Android开发之解析XML-SAX
- Android开发之XML解析——SAX解析XML
- android SAX解析XML
- Android SAX解析XML
- android SAX解析XML
- android xml-----Sax解析
- Android SAX解析XML
- Android SAX解析XML
- Android SAX解析XML
- Android SAX解析XML
- Android SAX 解析 XML
- Android SAX解析XML
- Android Sax解析xml
- android SAX解析XML
- android xml解析 sax
- NSString/NSData/char*类型转换
- Linux软连接和硬链接
- Android开发 --- 文件下载
- Android开发 --- ContentProvider
- 杜苏芮来了
- Android开发 --- SAX解析XML
- sizeof
- Android开发 --- 广播初步 BroadcastReceiver
- Android开发 --- 广播 注册
- PC机并口、并口扩展卡使用EPP模式通信,ECP SPP等
- u-boot-2009.08在2440上的移植详解(一)
- Android开发 --- Wifi 管理
- 面向对象的关系图
- Android开发 ---Socket编程