用sax和Android中的pull解析xml文件,具体看文章内容,求好心大神解答!

漫游的民工 2014-01-16 10:31:20
我分别用sax和pull解析我的xml文件,敲原书代码可以解析,但是照着书解析我自己的xml文件却解析不了,下面是我的project目录:
下面分别是各个文件或类中的内容:
lock.xml
<?xml version="1.0" encoding="UTF-8"?>
<control>
<cmdType>mm</cmdType>
<sn>15</sn>
<deviceID>12</deviceID>
<lockCmd>ss</lockCmd>
</control>
SAXLockService.java
public class SAXLockService extends DefaultHandler{
private static final String TAG="SAXLockService";
private List<Lock> locks;
private String preTag;
Lock lock;
public List<Lock> getLock(){
return locks;
}
public void startDocument()throws SAXException{
locks=new ArrayList<Lock>();
}
public void startElement(String uri,String localName,String qName,Attributes attributes)throws SAXException{
if("control".equals(localName)){
for(int i=0;i<attributes.getLength();i++){
lock=new Lock();
lock.setId(Integer.valueOf(attributes.getValue(i)));
}
}
preTag=localName;
}
public void characters(char[] ch,int start,int length)throws SAXException{
String data=new String(ch,start,length).trim();
if(!"".equals(data.trim())){
Log.i(TAG,"content:"+data.trim());
}
if("cmdType".equals(preTag)){
lock.setCmdType(data);
}
if("sn".equals(preTag)){
lock.setSn(new Integer(data));
}
if("deviceID".equals(preTag)){
lock.setDeviceID(new Integer(data));
}
if("lockCmd".equals(preTag)){
lock.setLockCmd(data);
}
}
public void endElement(String uri,String localName,String qName)throws SAXException{
if("control".equals(localName)){
locks.add(lock);
lock=null;
}
preTag=null;
}
public void endDocument()throws SAXException{
Log.i(TAG,"***endDocument***");
}
}
PullLockService.java
public class PullLockService {
public static List<Lock> getLock(InputStream in)throws Exception{
Lock lock=null;
List<Lock> locks=null;
XmlPullParser pullParser=Xml.newPullParser();
pullParser.setInput(in,"UTF-8");
int event=pullParser.getEventType();
while(event!=XmlPullParser.END_DOCUMENT){
switch(event){
case XmlPullParser.START_DOCUMENT:
locks=new ArrayList<Lock>();
break;
case XmlPullParser.START_TAG:
if("control".equals(pullParser.getName())){
lock=new Lock();
break;
}
if(lock!=null){
if("cmdType".equals(pullParser.getName())){
lock.setCmdType(pullParser.nextText());
}
if("sn".equals(pullParser.getName())){
lock.setSn(new Integer(pullParser.nextText()));
}
if("deviceID".equals(pullParser.getName())){
lock.setDeviceID(Integer.parseInt(pullParser.nextText()));
}
if("lockCmd".equals(pullParser.getName())){
lock.setLockCmd(pullParser.nextText());
}
}
break;
case XmlPullParser.END_TAG:
if("control".equals(pullParser.getName())){
locks.add(lock);
lock=null;
}
break;
}
event=pullParser.next();
}
return locks;
}
}
MainActivity.java这个内容不全,就是把xml中的内容解析出来,放在ListView中,分别用到了sax和pull,其中pull被注释了,我分别测试用的,
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button=(Button)findViewById(R.id.button);
list=(ListView)findViewById(R.id.listView);
button.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
/* InputStream instream=MainActivity.class.getClassLoader().getResourceAsStream("lock.xml");
try {
locks=PullLockService.getLock(instream);
adapter=new ArrayAdapter<Lock>(MainActivity.this,android.R.layout.simple_expandable_list_item_1,locks);
list.setAdapter(adapter);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
try {
locks=MainActivity.this.sax_XML();
adapter=new ArrayAdapter<Lock>(MainActivity.this,android.R.layout.simple_expandable_list_item_1,locks);
list.setAdapter(adapter);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
public static List<Lock> sax_XML()throws Exception{
InputStream is=MainActivity.class.getClassLoader().getResourceAsStream("lock.xml");
SAXLockService service=new SAXLockService();
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser saxParser=spf.newSAXParser();
saxParser.parse(is,service);
List<Lock> list=service.getLock();
is.close();
return list;
}
}
如果大神不了解Android,可以用纯Java中的SAX解析,用main()函数输出打印在控制台,谢谢!但是在哪改了,如何修改,原因一定要说清楚啊,本人菜鸟级人物,智商低,谅解之!
...全文
39 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧