在SAX解析器的Andr​​oid拼接错误 [英] concatenation error in SAX Parser android

查看:155
本文介绍了在SAX解析器的Andr​​oid拼接错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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级联的问题。我跟一些<一个href=\"http://stackoverflow.com/questions/13578630/listview-data-spliting-into-another-row-after-sax-parsing/13591630#comment18679602_13591630\">$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解析器的Andr​​oid拼接错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆