2014-06-10 71 views
1

我设法创建一个使用JAXB与以下输出的XML文件:加载数据到列表

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<person> 
    <data> 
     <id>1000</id> 
     <age>10</age> 
     <values> 
      <value>646.2</value> 
      <value>637.44</value> 
     </values> 
     <dates> 
      <date>2014-06-05</date> 
      <date>2014-06-04</date> 
     </dates> 
    </data> 
    <data> 
     <id>1001</id> 
     <age>10</age> 
     <values> 
      <value>546.4</value> 
      <value>541.5</value> 
     </values> 
     <dates> 
      <date>2014-06-05</date> 
      <date>2014-06-04</date> 
     </dates> 
    </data> 
    <data> 
     <id>1002</id> 
     <age>12</age> 
     <values> 
      <value>40.59</value> 
      <value>40.21</value> 
     </values> 
     <dates> 
      <date>2014-06-05</date> 
      <date>2014-06-04</date> 
     </dates> 
    </data> 
</person> 

我的人等级:

public class Person { 

    private final SimpleStringProperty id = new SimpleStringProperty(); 
    private final SimpleIntegerProperty age = new SimpleIntegerProperty(); 

    private List<Double> value = new ArrayList<Double>(); 
    private List<String> date = new ArrayList<String>(); 

    public String getId() { 
     return id.get(); 
    } 

    @XmlElement(name = "id") 
    public void setId(String id) { 
     this.id.set(id); 
    } 

    public Integer getAge() { 
     return age.get(); 
    } 

    @XmlElement(name = "age") 
    public void setAge(Integer age) { 
     this.age.set(age); 
    } 

    @XmlElementWrapper(name = "values") 
    @XmlElement(name = "value") 
    public List<Double> getValue() { 
     return value; 
    } 

    public void setValue(List<Double> value) { 
     this.value = value; 
    } 

    @XmlElementWrapper(name = "dates") 
    @XmlElement(name = "date") 
    public List<String> getDates() { 
     return date; 
    } 

    public void setDates(List<String> date) { 
     this.date = date; 
    } 
} 

我的目录包装类(如允许不标注为可观察列表):

@XmlRootElement(name = “person”) 
public class ListWrapper { 

    private List<Person> persons; 

    public PersonListWrapper() { 
     persons = FXCollections.<Person>observableArrayList(); 
    } 

    public void setPerson(List<Person> persons) { 
     this.persons = persons; 
    } 

    @XmlElement(name = “data”) 
    public List<Person> getPerson() { 
     return this.persons; 
    } 
} 

我的主要应用程序,包括部分。解组方法:

private ObservableList<Person> pData = FXCollections.observableArrayList(); 

public ObservableList<Person> getPersonData() { 
    return this.pData; 
} 

public void loadFile (File file) { 
     JAXBContext jaxb = JAXBContext.newInstance(ListWrapper.class); 
     Unmarshaller um = jaxb.createUnmarshaller(); 
     ListWrapper wr = (ListWrapper) um.unmarshal(file); 
     pData.clear(); 
     pData.addAll(wr.getPerson()); 
    } 

配件我的JavaFX控制器类:

public void initializePersonTable() { 
idCol.setCellValueFactory(new PropertyValueFactory<Person, String>("id")); 
ageCol.setCellValueFactory(new PropertyValueFactory<Person, Integer>("age")); 
} 

public void setMainApp(MainApp mainApp) { 
    this.mainApp = mainApp; 
    this.personTable.setItems(mainApp.getPersonData()); 
} 

private void NewPersonButton(ActionEvent event) { 
    Person p = new Person(); 
    p.setSymbol(personTF.getText()); // personTF = JavaFX Textfield 
    p.setWeight(Integer.parseInt(ageTF.getText())); // ageTF = JavaFX Textfield 
    mainApp.getPersonData().add(p); 
} 

当我加载保存的XML文件时,通过可观察列表将“id”和“age”添加到tableview中。加载文件后如何访问“值”和“日期”数据?我想用这些数据来创建统计信息。

如果我例如。使用方法:

Person p = new Person(); 
System.out.println(p.getDates()); 

...我只是得到一个空列表返回

+0

您应该发布一些更多的代码,所以我们可以看问题出在哪里,尤其是创建个人实例会有帮助。 – dhiller

+0

嗨dhiller。刚刚做到了。让我知道你是否需要更多细节。谢谢! –

回答

1

新手问题...我找到了解决自己:

private void Test{ 
    for (Person p : personTable.getItems()) { 
     System.out.println(p.getDates()); 
     System.out.println(p.getValues()); 
    }