欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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:
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();
}
}

}
相关标签: xml sax