求助,AndroidXML解析问题

ghcgoon 2011-08-24 02:13:26
用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;
}

}
...全文
344 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
javaliao 2011-11-16
  • 打赏
  • 举报
回复
楼主有解决这个问题,我现在也遇到这个问题了,请问楼主怎么解决的
chqiang0_0 2011-08-29
  • 打赏
  • 举报
回复
实在代码都没问题情况下,检查下xml保存的格式,android里支持utf-8,而不是txt改名xml的anim格式。
ghcgoon 2011-08-29
  • 打赏
  • 举报
回复
我发现将240条数据 全部改成英文的话 是没问题的。。。 编码格式已经改为UTF-8了啊。 还有其他地方可以改的吗。
ghcgoon 2011-08-29
  • 打赏
  • 举报
回复
是使用的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条左右时 就报错。 错误同上。。 很奇怪。。
小裴同学 2011-08-26
  • 打赏
  • 举报
回复
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();
}
}
我的是这样,你看看吧。
ghcgoon 2011-08-26
  • 打赏
  • 举报
回复
是这样的,XML应该是没问题的,因为在windows Mobile 系统里已经测试过了。可以得到完整数据。真是头大啊。
luzhiqin 2011-08-26
  • 打赏
  • 举报
回复
xml文件里面有问题吧
小裴同学 2011-08-26
  • 打赏
  • 举报
回复
你的xml中可能个别单词打错了。。
78 2011-08-26
  • 打赏
  • 举报
回复
检查一下原XML文件的第180行和181行。。。。。可能有格式不对。
ghcgoon 2011-08-26
  • 打赏
  • 举报
回复
我感觉代码没什么错误。XML的数据量有几百条。我把整个数据流打印出来 发现只能打印到180行,就挂了。难道是因为数据量太大了?
sunmable 2011-08-25
  • 打赏
  • 举报
回复
这个格式的解析方式有什么特别么。关键在于你没有想区分它是对像的。

方法如下:如你所以定义一个ArrayList<String>在开始的时候初始化。
在每一个name开始的时候str赋值。在name结束的时候add进去就可以了。

当然如果你想区分这是哪一个对像的。别人也不会给你一个这样的,它们会加一个ID。
这时候我们要用“标记”来解决。至于如何标记,要看具体情况了。
ghcgoon 2011-08-25
  • 打赏
  • 举报
回复
<result name=”allname”>
<name>XXX</name>
<name>XXX</name>
<name>XXX</name>
</result>

这种XML 格式应该没问题吧?能说清楚点吗。或者说你们碰到这种XML怎么解析。。。谢谢~~
j_f0001 2011-08-24
  • 打赏
  • 举报
回复
XML的数据源格式不正确
ghcgoon 2011-08-24
  • 打赏
  • 举报
回复
上面的name 即spotname 我写错了。
ghcgoon 2011-08-24
  • 打赏
  • 举报
回复
要解析的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只解析了一次就报错。


麻烦帮忙分析一下。菜鸟伤不起啊。。 谢谢了。
sunmable 2011-08-24
  • 打赏
  • 举报
回复
建议使用android自带的解析方法pull解析,这个方法使用起来很好,而且速度要比dom sax好点。


并且在网络开发解析XML过程中大多数人使用pull解析
ghcgoon 2011-08-24
  • 打赏
  • 举报
回复
xml应该没问题,但是数据量比较大,有200多条数据吧。难道SAX不能解析大量数据,还有其他方法吗?谢谢了·~
儿大不由爷 2011-08-24
  • 打赏
  • 举报
回复
你的xml有问题吧,用IE看看,能打开否

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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