SAX解析xml文件 在用SAX解析XML文件时 只执行了startDocument()方法 其余几个都执行不到 是哪儿出了问题 android SAX XML 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参数对了么public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {} 你最好贴出解析的代码和你的xml 这是MainActivity中的内容package com.example.activity18;import java.io.IOException;import java.io.StringReader;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.XMLReader;import xmlParse.XmlInfo;import xmlParse.XmlParse;import com.example.download.DownLoad;import android.os.Bundle;import android.app.Activity;import android.app.ListActivity;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends ListActivity { private XmlParse xmlparse=new XmlParse(); private static final String strurl="http://10.0.2.2/mldn/a3.xml"; @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub if(item.getItemId()==1) { //System.out.println("itemid----->"+item.getItemId()); downloadXML(strurl); } else if(item.getItemId()==2) { System.out.println("itemid----->"+item.getItemId()); } return super.onOptionsItemSelected(item); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); menu.add(0, 1, 1, R.string.update); menu.add(0, 2, 2, R.string.about); return true; } public String downloadXML(String strxml) { DownLoad download=new DownLoad(); String s=""; try { s=download.downloadFile(strxml); System.out.println("1111111111111111"); SAXParser(s); System.out.println("22222222222"); showList(); System.out.println("333333333333"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return s; } public String SAXParser(String str) { SAXParserFactory factory=SAXParserFactory.newInstance(); try { XMLReader reader=factory.newSAXParser().getXMLReader(); reader.setContentHandler(xmlparse); try { reader.parse(new InputSource(new StringReader(str))); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public void showList() { System.out.println("4444444444444"); System.out.println(xmlparse.list.size()); for (XmlInfo info : xmlparse.list) { System.out.println(info); } }}这是DownLoad中的内容package com.example.download;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class DownLoad { public String downloadFile(String str) throws IOException { URL url=new URL(str); HttpURLConnection urlConn=(HttpURLConnection)url.openConnection(); BufferedReader br=new BufferedReader(new InputStreamReader(urlConn.getInputStream())); String str2=null; String str1=null; while((str1=br.readLine())!=null) { //System.out.println(str1); str2+=str1; } //System.out.println("s2="+str2); br.close(); return str2; }}这是XmlParse中的内容package xmlParse;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 XmlParse extends DefaultHandler { String tagName=null; public static List<XmlInfo> list=new ArrayList<XmlInfo>(); XmlInfo info; @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub super.characters(ch, start, length); System.out.println("characters"); String str=new String(ch,start,length); if(tagName.equals("mp3_name")) { info.setMp3_name(str); } else if(tagName.equals("mp3_size")) { info.setMp3_size(str); } else if(tagName.equals("lrc_name")) { info.setLrc_name(str); } else if(tagName.equals("lrc_size")) { info.setLrc_size(str); } else if(tagName.equals("id")) { info.setId(str); } } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub super.endDocument(); System.out.println("endDocument"); } @Override public void endElement(String uri, String localName, String qName) throws SAXException { // TODO Auto-generated method stub super.endElement(uri, localName, qName); System.out.println("endElement"); if(qName.equals("resource")) { info.toString(); list.add(info); } tagName=""; } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub //super.startDocument(); System.out.println("startDocument"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { // TODO Auto-generated method stub super.startElement(uri, localName, qName, attributes); System.out.println("startElement"); tagName=localName; if(tagName.equals("resource")) { info=new XmlInfo(); } } }这是XmlInfo中的内容package xmlParse;public class XmlInfo { public String getId() { return id; } public void setId(String id) { this.id = id; } public String getMp3_name() { return mp3_name; } public void setMp3_name(String mp3_name) { this.mp3_name = mp3_name; } public String getMp3_size() { return mp3_size; } public void setMp3_size(String mp3_size) { this.mp3_size = mp3_size; } public String getLrc_name() { return lrc_name; } public void setLrc_name(String lrc_name) { this.lrc_name = lrc_name; } public String getLrc_size() { return lrc_size; } public void setLrc_size(String lrc_size) { this.lrc_size = lrc_size; } @Override public String toString() { // TODO Auto-generated method stub System.out.println(id); return null; } private String id; private String mp3_name; private String mp3_size; private String lrc_name; private String lrc_size; } 大概就是要读取服务器端的a3.xml文件 然后将其解析 每个<resource></resource>中的内容都放入一个新对象XmlInfo中 然后再存入list集合中 最后将集合中的元素输出这个是a3.xml中的内容:<?xml version="1.0" encoding="GB2312" standalone="no"?><resources><resource><id>1001</id><mp3_name>zhangjie_mp3</mp3_name><mp3_size>11092822</mp3_size><lrc_name>zhangjie_lrc</lrc_name><lrc_size>1205</lrc_size></resource></resources> http://blog.csdn.net/xiaanming/article/details/8937746SAX解析XML 楼主可以看看 谢谢楼上各位的回答 最后发现读取xml文件存入str这个过程出了问题 最后导致读取到的xml文件格式出错 Android 4.0真机系统无法连接Tomcat服务器 在4.X上编写的程序无法在2.3上运行吗? 程序崩溃 使用.startAnimation(xxx) 请教一个HelloWorld的问题。。。谢谢 读取SDcard任意一个文件的大小的方法 android更新ui问题 google android-lockpattern 图案密码解锁哪位能给一个调用好的示例吗 新人求教。。 apk编译后安装的问题 后台socket长连接为什么会自动断开 初学Fragments+ActionBar两个基础问题请教下 关于回调函数的理解
}
package com.example.activity18;import java.io.IOException;
import java.io.StringReader;import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;import xmlParse.XmlInfo;
import xmlParse.XmlParse;import com.example.download.DownLoad;import android.os.Bundle;
import android.app.Activity;
import android.app.ListActivity;
import android.view.Menu;
import android.view.MenuItem;public class MainActivity extends ListActivity { private XmlParse xmlparse=new XmlParse();
private static final String strurl="http://10.0.2.2/mldn/a3.xml";
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
if(item.getItemId()==1)
{
//System.out.println("itemid----->"+item.getItemId());
downloadXML(strurl);
}
else if(item.getItemId()==2)
{
System.out.println("itemid----->"+item.getItemId());
}
return super.onOptionsItemSelected(item);
} @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
menu.add(0, 1, 1, R.string.update);
menu.add(0, 2, 2, R.string.about);
return true;
}
public String downloadXML(String strxml)
{
DownLoad download=new DownLoad();
String s="";
try {
s=download.downloadFile(strxml);
System.out.println("1111111111111111");
SAXParser(s);
System.out.println("22222222222");
showList();
System.out.println("333333333333");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
public String SAXParser(String str)
{
SAXParserFactory factory=SAXParserFactory.newInstance();
try {
XMLReader reader=factory.newSAXParser().getXMLReader();
reader.setContentHandler(xmlparse);
try {
reader.parse(new InputSource(new StringReader(str)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public void showList()
{
System.out.println("4444444444444");
System.out.println(xmlparse.list.size());
for (XmlInfo info : xmlparse.list) {
System.out.println(info);
}
}}这是DownLoad中的内容
package com.example.download;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;public class DownLoad {
public String downloadFile(String str) throws IOException
{
URL url=new URL(str);
HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();
BufferedReader br=new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
String str2=null;
String str1=null;
while((str1=br.readLine())!=null)
{
//System.out.println(str1);
str2+=str1;
}
//System.out.println("s2="+str2);
br.close();
return str2;
}}这是XmlParse中的内容
package xmlParse;
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 XmlParse extends DefaultHandler { String tagName=null;
public static List<XmlInfo> list=new ArrayList<XmlInfo>();
XmlInfo info;
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
System.out.println("characters");
String str=new String(ch,start,length);
if(tagName.equals("mp3_name"))
{
info.setMp3_name(str);
}
else if(tagName.equals("mp3_size"))
{
info.setMp3_size(str);
}
else if(tagName.equals("lrc_name"))
{
info.setLrc_name(str);
}
else if(tagName.equals("lrc_size"))
{
info.setLrc_size(str);
}
else if(tagName.equals("id"))
{
info.setId(str);
}
} @Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("endDocument");
} @Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
System.out.println("endElement");
if(qName.equals("resource"))
{
info.toString();
list.add(info);
}
tagName="";
} @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
//super.startDocument();
System.out.println("startDocument");
} @Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
System.out.println("startElement");
tagName=localName;
if(tagName.equals("resource"))
{
info=new XmlInfo();
}
} }这是XmlInfo中的内容
package xmlParse;public class XmlInfo {
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getMp3_name() {
return mp3_name;
}
public void setMp3_name(String mp3_name) {
this.mp3_name = mp3_name;
}
public String getMp3_size() {
return mp3_size;
}
public void setMp3_size(String mp3_size) {
this.mp3_size = mp3_size;
}
public String getLrc_name() {
return lrc_name;
}
public void setLrc_name(String lrc_name) {
this.lrc_name = lrc_name;
}
public String getLrc_size() {
return lrc_size;
}
public void setLrc_size(String lrc_size) {
this.lrc_size = lrc_size;
}
@Override
public String toString() {
// TODO Auto-generated method stub
System.out.println(id);
return null;
}
private String id;
private String mp3_name;
private String mp3_size;
private String lrc_name;
private String lrc_size;
}
这个是a3.xml中的内容:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<resources>
<resource>
<id>1001</id>
<mp3_name>zhangjie_mp3</mp3_name>
<mp3_size>11092822</mp3_size>
<lrc_name>zhangjie_lrc</lrc_name>
<lrc_size>1205</lrc_size>
</resource>
</resources>