Java SAX 解析 Xml 文件

问题描述

当我使用 SAXParser 时,我有 XML 流,我总是面对具有不同值的重复元素,所以 解析器无法区分它们,所以我使用 xmlReader 来设置另一个处理程序 问题第一个处理程序正常工作,但第二个处理程序总是抛出 null 我找不到问题出在哪里,如果有什么可以优化我的代码

<players>
    <player nation ="Egypt" Gender ="male">
        <id>20</id>
        <name>ahmed</name>
        <teams total="2">
            <team val = "200">
                <id>30</id>
                <name>geh</name>
                <start-date>
                    <year>2009</year>
                    <month>9</month>
                </start-date>
                <is-current>true</is-current>
            </team>
            <team>
                <id>23</id>
                <name>slk</name>
                <start-date>
                    <year>2007</year>
                    <month>11</month>
                </start-date>
                <end-date>
                    <year>2009</year>
                    <month>7</month>
                </end-date>
            </team>
        </teams>
    </player >
public List<Player> players(){
    return playerlist;
}
public List<Team> AddTeam( List teams){
    this.teams = teams;
    return teams;
}
@Override
public void startElement(String uri,String localName,String qName,Attributes Attr) throws SAXException {

    if(qName.equalsIgnoreCase("player")){
        player = new Player();
         for(int i = 0 ; i < Attr.getLength(); i++){

             String attr = Attr.getValue(i);
               player.setAttr(attr);
         }
         if(playerlist == null){
             playerlist = new LinkedList<>();
         }
    }
    else if(qName.equalsIgnoreCase("id")){
        hasid = true;
    }
    else if(qName.equalsIgnoreCase("name")){
        hasname = true;
    }
    else if(qName.equalsIgnoreCase("teams")){
        hasteams = true;
    }
    else if(qName.equalsIgnoreCase("team")){

       reader.setContentHandler(new TeamHandler(reader,this));
    }



}
@Override
public void characters(char[] ch,int start,int length){
    if(hasid){
        player.setId(Integer.parseInt(new String(ch,start,length)));
        hasid = false;
    }
    if(hasname){
        player.setName(new String(ch,length));
        hasname =false;
    }
    else if(hasteams){
        player.setTeams(new String(ch,length));
        hasteams = false;
    }
    else if(hasteam){
        player.setTeam(new String(ch,length));
        hasteam = false;
    }

}
@Override
public void endElement(String uri,String qName)throws SAXException{
    if(qName.equalsIgnoreCase("player")){
        playerlist.add(player);
    }
}

}

public TeamHandler(XMLReader  reader,PlayerHandler parent){
    this.reader =reader;
    this.parent= parent;
    this.team = new Team();
    this.teamList = new LinkedList<Team>();
    teams();
}
private boolean teamid = false;
private boolean teamname = false;
private boolean teamstart = false;
private  boolean teamcurrent = false;
private boolean teamend = false;

private List<Team> teamList ;
private Team team;

public List<Team> teams(){
    return teamList;
}
@Override
public void startElement(String uri,String  LocalName,Attributes Attr) throws SAXException{

    if(qName.equalsIgnoreCase("name")){
        teamname =true;
    }
    if(qName.equalsIgnoreCase("id")){
        teamid =true;
    }
}
@Override
public void characters(char[] ch,int length){

    if(teamid){
        team.setTeam_id(Integer.parseInt(new String(ch,length)));
        teamid =false;

    }
    else if(teamname){
        team.setTeam_name(new String(ch,length));
        teamname =false;
    }



}
@Override
public void endElement (String uri,String qName)
        throws SAXException{






     if(qName.equals("team")){
         teamList.add(team);
        parent.AddTeam(teamList);
        reader.setContentHandler(parent);
    }
}

}

结果总是这样:

Player{name='ahmed',id=20,teams='
        ',team='null',Attr='male'}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...