Как я могу создать объект 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