SAX解析
程序员文章站
2022-05-28 08:03:20
...
2012年4月17日
address:河北邢台市柏乡县
SAX解析
今天夏夏给我个xml让我帮他解析,哎,悲剧啊,好久没写代码了,啥都不会了,就写了下,还好没问题,哈哈,关键是太简单了,啦啦啦
工程结构图:
[img]
[img]http://dl.iteye.com/upload/attachment/0066/7373/42db7350-1342-303c-acee-9938c5dd594f.jpg[/img]
[/img]
xml文件结构:
[img]
[img]http://dl.iteye.com/upload/attachment/0066/7375/b45ddc36-6c8e-39de-84b1-b5f1ccf512c0.jpg[/img]
[/img]
实体类我就不写了,都是写属性和set、get方法。。。。。。
MyDefaultHandler:
测试类:
address:河北邢台市柏乡县
SAX解析
今天夏夏给我个xml让我帮他解析,哎,悲剧啊,好久没写代码了,啥都不会了,就写了下,还好没问题,哈哈,关键是太简单了,啦啦啦
工程结构图:
[img]
[img]http://dl.iteye.com/upload/attachment/0066/7373/42db7350-1342-303c-acee-9938c5dd594f.jpg[/img]
[/img]
xml文件结构:
[img]
[img]http://dl.iteye.com/upload/attachment/0066/7375/b45ddc36-6c8e-39de-84b1-b5f1ccf512c0.jpg[/img]
[/img]
实体类我就不写了,都是写属性和set、get方法。。。。。。
MyDefaultHandler:
package com.amaker.xml;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MyDefaultHandler extends DefaultHandler {
private List<Item> itemList;
private Body currentbody;
private Item currentitem;
private String currentTag;
@Override
public void startDocument() throws SAXException {
super.startDocument();
itemList = new ArrayList<Item>();
currentbody = new Body();
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if(qName!=null&&qName.equals("ITEM")){
currentitem = new Item();
}
currentTag = qName;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
if(qName!=null&&qName.equals("ITEM")){
itemList.add(currentitem);
currentitem = null;
}
currentTag = null;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
if(currentTag!=null){
String data = new String(ch,start,length);
//外面第一个元素
if(currentTag.equals("SHOWTYPE")){
currentbody.setShowtype(data);
}
//外面第二个元素
if(currentTag.equals("BG")){
currentbody.setBg(data);
}
//外面第三个元素
if(currentTag.equals("TAB")){
currentbody.setTab(data);
}
//外面第四个元素
if(currentTag.equals("BB_DOWN")){
currentbody.setBb_down(data);
}
//外面第五个元素
if(currentTag.equals("BRECT")){
currentbody.setBrect(data);
}
//ITEM元素的第一个属性
if(currentTag.equals("SIERERNO")){
currentitem.setSiererno(data);
}
//ITEM元素的第二个属性
if(currentTag.equals("RECT")){
currentitem.setRect(data);
}
//ITEM下还有好多,我就不一一写了,娃哈哈。。。。。。。。
}
}
public List<Item> getItems(){
return itemList;
}
public Body getBody(){
return currentbody;
}
}
测试类:
package com.amaker.xml;
import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.SAXException;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
parse();
}
public static void parse(){
InputStream in = new Test().getClass().getClassLoader().getResourceAsStream("tel_status.xml");
//如果示android工程,在res下建个文件夹:raw,并把stdent.xml文件放进去,这样获取输入流
//InputStream in = getResources().openRawResource(R.raw.stdent);
SAXParserFactory factory = SAXParserFactory.newInstance();
try {
SAXParser parser= factory.newSAXParser();
MyDefaultHandler handler = new MyDefaultHandler();
parser.parse(in, handler);
List<Item> list = handler.getItems();
Body body = handler.getBody();
System.out.println(body.toString());
for(Item s:list){
System.out.println(s);
}
} catch(Exception e) {
e.printStackTrace();
}
}
}