Member 13439040 Ответов: 0

Как я могу создать объект ArrayList из неупорядоченными объектами JAXB?


Мне нужно разобрать xml-документ с большим количеством полей, сохранить его в ArrayList (если нет лучшего способа) и выполнить поиск / редактирование данных в main. Прямо сейчас я пытаюсь построить ArrayList, но не знаю, как это сделать. Как я могу составить этот список и использовать его в основном?

Что я уже пробовал:

Это код, который у меня есть до сих пор. Мой класс LoadDataXML-это то место, где я работаю:

public class LoadDataXML extends CharacterImporter {
    
    LoadDataXML() {        
    }
    
    public ArrayList<CharacterImporter> LoadTheDataChars() {
        
        ArrayList<CharacterImporter> characterList = null;
        File file = new File("starwars.xml");
        
        try {
            
            System.out.println("Start of character import...\n"); 
 
            JAXBContext jc = JAXBContext.newInstance(Characters.class);
            Unmarshaller jaxbUnmarshaller = jc.createUnmarshaller();  
                      
            Characters chars = (Characters)jaxbUnmarshaller.unmarshal(file); 
 
            int counter = 0;
            for (CharacterImporter c1: chars.getCharacters()) {
                counter++;
                System.out.println("Character " + counter + " loading");
                Character char1 = Character.CreateCharacter(c1);  
                characterList.addAll(characterList);  // this was my attempt to populate the list, and it brings a NullPointerException
                System.out.println(char1.getName()); // this was a test to see if the data was bound yet - the names of each character do print out
            }
  
        } catch (JAXBException ex) {
            System.out.println(ex.getMessage());
            Logger.getLogger(LoadDataXML.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return characterList;
    }
}


Линии в основном используются для вызова:

 LoadDataXML x1 = new LoadDataXML();
x1.LoadTheDataChars();
x1.toString();


Другие используемые классы приведены ниже:

@XmlRootElement(name = "root", namespace="")  
public class Characters {
    private ArrayList<CharacterImporter> _characters = new ArrayList<>();
 
    public ArrayList<CharacterImporter> getCharacters() {
        return _characters;
    }
  
    @XmlElement(name = "character")
    public void setCharacters(ArrayList<CharacterImporter> characters) {
        this._characters = characters;
    }
}


@XmlRootElement 
public class CharacterImporter {
    @XmlElement(name = "name")
    public String name;
    @XmlElement(name = "height")
    public int height;
    @XmlElement(name = "mass")
    public int mass;
    @XmlElement(name = "birth_year")
    public String birth_year;
    @XmlElement(name = "gender")
    public String gender;
    @XmlElement(name = "homeworld")
    public String homeworld;
}


public class Character {
    public String name;
    public int height;
    public int mass;
    public String birth_year;
    public String gender;
    public String homeworld;
    
    public Character() {        
    }
    
    public static Character CreateCharacter(CharacterImporter cImp) {
        Character output = new Character();
        output.name = cImp.name;
        output.height = cImp.height;
        output.mass = cImp.mass;
        output.birth_year = cImp.birth_year;
        output.gender = cImp.gender;
        output.homeworld = cImp.homeworld;
        
        return output;
    }
     // other getters and setters are here

0 Ответов