用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;
}}
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;
}}
并且在网络开发解析XML过程中大多数人使用pull解析
<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只解析了一次就报错。
麻烦帮忙分析一下。菜鸟伤不起啊。。 谢谢了。
<name>XXX</name>
<name>XXX</name>
<name>XXX</name>
</result>
这种XML 格式应该没问题吧?能说清楚点吗。或者说你们碰到这种XML怎么解析谢谢~~
在每一个name开始的时候str赋值。在name结束的时候add进去就可以了。当然如果你想区分这是哪一个对像的。别人也不会给你一个这样的,它们会加一个ID。
这时候我们要用“标记”来解决。至于如何标记,要看具体情况了。
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();
}
}
我的是这样,你看看吧。
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条左右时 就报错。 错误同上。。 很奇怪。。