java - 将数据从 XML 加载到列表

标签 java xml jaxb

我设法使用 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 Controller 类的部分:

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());

...我刚刚返回一个空列表

最佳答案

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

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

关于java - 将数据从 XML 加载到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24150326/

相关文章:

java - 从 Groovy 测试用例模拟 Java 类

Java整数溢出

xml - XSLT 映射算法

tomcat - Tapestry + JaxB 冲突

java - 将时间戳字符串 "HH:mm:ss"转换为持续时间

java - 将多个 String 和 ImageView 添加到一个 View

xml - Internet Explorer 以随机顺序显示 XML 属性

c# - 如何将 List<T> 序列化为 XML?

java - 使用JAXB创建spring bean和必要的属性

java - 为什么 XmlJavaTypeAdapter 在父类中被忽略