用SAX进行XML的解析 出现如下错误,调试了很久不知道是哪里出错了。
08-24 14:11:53.859: WARN/System.err(13044): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 5146: partial character
08-24 14:11:53.867: WARN/System.err(13044):     at org.apache.harmony.xml.ExpatParser.finish(ExpatParser.java:553)
08-24 14:11:53.867: WARN/System.err(13044):     at org.apache.harmony.xml.ExpatParser.parseDocument(ExpatParser.java:483)
08-24 14:11:53.867: WARN/System.err(13044):     at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:320)
08-24 14:11:53.867: WARN/System.err(13044):     at org.apache.harmony.xml.ExpatReader.parse(ExpatReader.java:277)
哪位大虾能帮帮我,在线等。
代码如下public class XmlSpotItemsHandler extends DefaultHandler {
   private  String tagName ;
   private  ArrayList<String> spotItems ;
   
   public XmlSpotItemsHandler(){
   tagName = "result";
   spotItems = new ArrayList<String>();
   }

   @Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.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);
tagName = localName;
}


@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);

}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);

if(tagName.equalsIgnoreCase("spotname")){
String spotname = new String(ch,start,length);
spotItems.add(spotname);
}
//System.out.println(spotItems.size());
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
System.out.println("what happend to parse");
}

public ArrayList<String> getValues(){
System.out.println("spotItems"+spotItems.isEmpty());
return spotItems;
}}

解决方案 »

  1.   

    你的xml有问题吧,用IE看看,能打开否
      

  2.   

    xml应该没问题,但是数据量比较大,有200多条数据吧。难道SAX不能解析大量数据,还有其他方法吗?谢谢了·~
      

  3.   

    建议使用android自带的解析方法pull解析,这个方法使用起来很好,而且速度要比dom sax好点。
    并且在网络开发解析XML过程中大多数人使用pull解析
      

  4.   

    要解析的XML格式如下
    <result name=”allname”>
    <name>XXX</name>
    <name>XXX</name>
    <name>XXX</name>
    ……
    </result>我使用你推荐的Pull方式  代码如下public static ArrayList<String> getItems(InputStream inputStream) throws Exception{
        int i = 0;
    ArrayList<String> Items = null;
    XmlPullParser parser = Xml.newPullParser();
    parser.setInput(inputStream, "UTF-8");
    String str  = null;
    int event = parser.getEventType();//产生第一个事件
    while(event!=XmlPullParser.END_DOCUMENT){
    switch(event){
    case XmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件
    Items = new ArrayList<String>();
    break;
    case XmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件
    if("name".equals(parser.getName())){//判断开始标签元素是否是spotname
    System.out.println(parser.nextText());
    System.out.println("parser....."+i++);
    str = (String)parser.nextText();
    }

    break;
    case XmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件
    if("spotname".equals(parser.getName())){//
    Items.add(str);
    str= "";

    }
    break;
    }
    event = parser.next();//进入下一个元素并触发相应事件
    }//end while
    return Items;
    }
    出现以下错误
    08-24 17:12:17.820: WARN/System.err(16470): org.xmlpull.v1.XmlPullParserException: Not on start tag.   即xml只解析了一次就报错。
     麻烦帮忙分析一下。菜鸟伤不起啊。。 谢谢了。
      

  5.   

    上面的name 即spotname 我写错了。
      

  6.   

    <result name=”allname”>
    <name>XXX</name>
    <name>XXX</name>
    <name>XXX</name>
    </result>
     
    这种XML 格式应该没问题吧?能说清楚点吗。或者说你们碰到这种XML怎么解析谢谢~~
      

  7.   

    这个格式的解析方式有什么特别么。关键在于你没有想区分它是对像的。方法如下:如你所以定义一个ArrayList<String>在开始的时候初始化。
              在每一个name开始的时候str赋值。在name结束的时候add进去就可以了。当然如果你想区分这是哪一个对像的。别人也不会给你一个这样的,它们会加一个ID。
    这时候我们要用“标记”来解决。至于如何标记,要看具体情况了。
      

  8.   

    我感觉代码没什么错误。XML的数据量有几百条。我把整个数据流打印出来 发现只能打印到180行,就挂了。难道是因为数据量太大了?
      

  9.   

    检查一下原XML文件的第180行和181行。。可能有格式不对。
      

  10.   

    你的xml中可能个别单词打错了。。
      

  11.   

    是这样的,XML应该是没问题的,因为在windows Mobile 系统里已经测试过了。可以得到完整数据。真是头大啊。
      

  12.   

    public class Mp3ListContentHandler extends DefaultHandler {
    private List<Mp3Info> infos = null;
    private Mp3Info mp3info = null;
    private String tagname; @Override
    public void characters(char[] ch, int start, int length)
    throws SAXException {
    String temp=new String(ch,start,length);
    if(tagname.equals("id")){
    mp3info.setId(temp);
    }else if(tagname.equals("mp3.name")){
    mp3info.setMp3name(temp);
    }else if(tagname.equals("mp3.size")){
    mp3info.setMp3size(temp);
    }
    } @Override
    public void endDocument() throws SAXException {
    // TODO Auto-generated method stub
    super.endDocument();
    } public Mp3ListContentHandler(List<Mp3Info> infos) {
    super();
    this.infos = infos;
    } public List<Mp3Info> getInfos() {
    return infos;
    } public void setInfos(List<Mp3Info> infos) {
    this.infos = infos;
    } @Override
    public void endElement(String uri, String localName, String qName)
    throws SAXException {
    if(qName.equals("resource")){
    infos.add(mp3info);
    }
    tagname="";
    } @Override
    public void startDocument() throws SAXException {

    super.startDocument();
    } @Override
    public void startElement(String uri, String localName, String qName,
    Attributes attributes) throws SAXException {
    this.tagname=localName;
    if(tagname.equals("resource")){
    mp3info=new Mp3Info();
    }
    }
    我的是这样,你看看吧。
      

  13.   

    实在代码都没问题情况下,检查下xml保存的格式,android里支持utf-8,而不是txt改名xml的anim格式。
      

  14.   

    是使用的UTF-8编码。       是这样的当XML中有240条数据时,解析到170条左右时就报错。错如如下
    08-24 14:11:53.859: WARN/System.err(13044): org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 5146: partial character
    我把XML数据减至120条时,解析到80条左右时 就报错。  错误同上。。 很奇怪。。
      

  15.   

    我发现将240条数据 全部改成英文的话 是没问题的  编码格式已经改为UTF-8了啊。  还有其他地方可以改的吗。