本文介绍了在SAX解析器的Android拼接错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在SAX解析器多个字符串拼接标记问题。
我的XML数据的样子(巨大的名单)如..
I have concatenation problem for multiple string tags in Sax Parser.My Xml Data look(huge list) like..
<Table diffgr:id="Table1" msdata:rowOrder="0">
<ID>213</ID>
<LastName>Sirk</LastName>
<FirstName>Thomas</FirstName>
<Height>6 ft 4 inches</Height>
<HomeTown>Glen St. Mary's</HomeTown>
<TeamName>Blue Devils</TeamName>
<Age>19</Age>
<FullName>1 Thomas Sirk</FullName>
</Table>
<Table diffgr:id="Table2" msdata:rowOrder="1">
<ID>17</ID>
<LastName>Vernon</LastName>
<FirstName>Conner</FirstName>
<Height>6 ft 1 inches</Height>
<HomeTown>Miami Fl</HomeTown>
<TeamName>Blue Devils</TeamName>
<Age>22</Age>
<FullName>2 Conner Vernon</FullName>
</Table>
<Table diffgr:id="Table3" msdata:rowOrder="2">
<ID>203</ID>
<LastName>Crowder</LastName>
<FirstName>Jamison</FirstName>
<Height>5 ft 9 inches</Height>
<HomeTown>Monroe NC</HomeTown>
<TeamName>Blue Devils</TeamName>
<Age>19</Age>
<FullName>3 Jamison Crowder</FullName>
</Table>
我以前在这个处理code这样的。
I used this code in handler like this.
class MyHandler extends DefaultHandler{
boolean is_sno=false;
boolean is_sname=false;
boolean is_sclass=false;
boolean is_sphno=false;
boolean is_semail=false;
boolean mIsSegment = false;
int mCurrentIndex = -1;
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
}
@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, name, attributes);
if (localName.equals("Table")) {
mCurrentIndex++;
al_sno.add("");
al_sname.add("");
al_sclass.add("");
al_sphno.add("");
al_semail.add("");
}
else if(localName.equals("ID")){
is_sno=true;
}
else if(localName.equals("TeamName")){
is_sname=true;
}
else if(localName.equals("Fullname")){
is_sclass=true;
}
/*else if(localName.equals("HomeTown")){
is_sphno=true;
}
else if(localName.equals("Height")){
is_semail=true;
}*/
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
if(is_sno){
al_sno.set(mCurrentIndex, new String(ch, start, length));
}
else if (is_sname) {
if (!mIsSegment) {
al_sname.set(mCurrentIndex, new String(ch, start, length));
} else {
al_sname.set(mCurrentIndex,
al_sname.get(al_sname.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;
}
else if(is_sclass){
if (!mIsSegment) {
al_sclass.set(mCurrentIndex, new String(ch, start, length));
} else {
al_sclass.set(mCurrentIndex,
al_sclass.get(al_sclass.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;
}
else if(is_sphno){
if (!mIsSegment) {
al_sphno.set(mCurrentIndex, new String(ch, start, length));
} else {
al_sphno.set(mCurrentIndex,
al_sphno.get(al_sphno.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;}
}
else if(is_semail){
if (!mIsSegment) {
al_semail.set(mCurrentIndex, new String(ch, start, length));
} else {
al_semail.set(mCurrentIndex,
al_semail.get(al_semail.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;}
}
}
@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, name);
if(localName.equals("ID")){
is_sno=false;
}
else if(localName.equals("TeamName")){
is_sname=false;
mIsSegment = false;
}
else if(localName.equals("Fullname")){
is_sclass=false;
mIsSegment = false;
}
else if(localName.equals("HomeTown")){
is_sphno=false;
mIsSegment = false;
}
else if(localName.equals("Height")){
is_semail=false;
mIsSegment = false;
}
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}
}
我试图显示团队的playerlist在一个页面,但大部分的字符串为越来越高,故乡,全名,TeamName级联的问题。我跟一些$c$c这里。它工作的罚款单串不为多。请帮我。
I trying to display the playerlist of team in one page but most of the strings getting Concatenation problem for Height,HomeTown,Fullname,TeamName. I followed some code here. It working fine for single string not for multiple. Please help me.
推荐答案
我已经重写了该处理程序的的SAXParser
:
I've rewrote the handler for the SaxParser
:
// the Lists of data
ArrayList<String> mIdList = new ArrayList<String>();
ArrayList<String> mLastNameList = new ArrayList<String>();
ArrayList<String> mFirstNameList = new ArrayList<String>();
ArrayList<String> mHeightList = new ArrayList<String>();
ArrayList<String> mHomeTownList = new ArrayList<String>();
ArrayList<String> mTeamNameList = new ArrayList<String>();
ArrayList<String> mAgeList = new ArrayList<String>();
ArrayList<String> mFullNameList = new ArrayList<String>();
的 MyHandler的
类:
class MyHandler extends DefaultHandler {
private boolean isIDTag = false;
boolean isLastNameTag = false;
boolean isFirstNameTag = false;
boolean isHeightTag = false;
boolean isHomeTownTag = false;
boolean isTeamNameTag = false;
boolean isAgeTag = false;
boolean isFullNameTag = false;
boolean mIsSegment = false;
private int mCurrentIndex = -1;
@Override
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
if (localName.equals("Table")) {
mCurrentIndex++;
mIdList.add("");
mLastNameList.add("");
mFirstNameList.add("");
mHeightList.add("");
mHomeTownList.add("");
mTeamNameList.add("");
mAgeList.add("");
mFullNameList.add("");
} else if (localName.equals("ID")) {
isIDTag = true;
} else if (localName.equals("LastName")) {
isLastNameTag = true;
} else if (localName.equals("FirstName")) {
isFirstNameTag = true;
} else if (localName.equals("Height")) {
isHeightTag = true;
} else if (localName.equals("HomeTown")) {
isHomeTownTag = true;
} else if (localName.equals("TeamName")) {
isTeamNameTag = true;
} else if (localName.equals("Age")) {
isAgeTag = true;
} else if (localName.equals("FullName")) {
isFullNameTag = true;
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if (isIDTag) {
// the ID
mIdList.set(mCurrentIndex, new String(ch, start, length));
} else if (isLastNameTag) {
if (!mIsSegment) {
mLastNameList.set(mCurrentIndex, new String(ch, start,
length));
} else {
mLastNameList.set(mCurrentIndex,
mLastNameList.get(mLastNameList.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;
} else if (isFirstNameTag) {
if (!mIsSegment) {
mFirstNameList.set(mCurrentIndex, new String(ch, start,
length));
} else {
mFirstNameList.set(mCurrentIndex,
mFirstNameList.get(mFirstNameList.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;
} else if (isHeightTag) {
if (!mIsSegment) {
mHeightList.set(mCurrentIndex,
new String(ch, start, length));
} else {
mHeightList.set(mCurrentIndex,
mHeightList.get(mHeightList.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;
} else if (isHomeTownTag) {
if (!mIsSegment) {
mHomeTownList.set(mCurrentIndex, new String(ch, start,
length));
} else {
mHomeTownList.set(mCurrentIndex,
mHomeTownList.get(mHomeTownList.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;
} else if (isTeamNameTag) {
if (!mIsSegment) {
mTeamNameList.set(mCurrentIndex, new String(ch, start,
length));
} else {
mTeamNameList.set(mCurrentIndex,
mTeamNameList.get(mTeamNameList.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;
} else if (isAgeTag) {
if (!mIsSegment) {
mAgeList.set(mCurrentIndex, new String(ch, start, length));
} else {
mAgeList.set(mCurrentIndex,
mAgeList.get(mAgeList.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;
} else if (isFullNameTag) {
if (!mIsSegment) {
mFullNameList.set(mCurrentIndex, new String(ch, start,
length));
} else {
mFullNameList.set(mCurrentIndex,
mFullNameList.get(mFullNameList.size() - 1)
+ new String(ch, start, length));
}
mIsSegment = true;
}
}
@Override
public void endElement(String uri, String localName, String name)
throws SAXException {
if (localName.equals("ID")) {
isIDTag = false;
} else if (localName.equals("LastName")) {
isLastNameTag = false;
mIsSegment = false;
} else if (localName.equals("FirstName")) {
isFirstNameTag = false;
mIsSegment = false;
} else if (localName.equals("Height")) {
isHeightTag = false;
mIsSegment = false;
} else if (localName.equals("HomeTown")) {
isHomeTownTag = false;
mIsSegment = false;
} else if (localName.equals("TeamName")) {
isTeamNameTag = false;
mIsSegment = false;
} else if (localName.equals("Age")) {
isAgeTag = false;
mIsSegment = false;
} else if (localName.equals("FullName")) {
isFullNameTag = false;
mIsSegment = false;
}
}
}
它应该现在的工作。
It should work now.
这篇关于在SAX解析器的Android拼接错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!