无法使用 JAXB 从 XML 文件中读取
Unable to read from XML file using JAXB
我正在尝试从下面的 XML 文件中读取:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parts>
<item>CPU</item>
<item>GPU</item>
<item>PSU</item>
</parts>
我的目标是将项目添加到 DefaultDataModel,以便更新 JList。但是,当我进入 for each 循环时,没有任何内容添加到列表中,也没有任何内容打印到控制台。如果我做错了什么,有人可以告诉我吗?
public void load()
{
// First clear the JLit before loading anything
partList.clear();
chosenList.clear();
File file = new File("partsList.xml");
try
{
// Setup JAXB to create a list of strings from the XML file
JAXBContext context = JAXBContext.newInstance(Parts.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
// Read the XML file
List<String> parts = (List<String>) unmarshaller.unmarshal(file);
System.out.println(parts);
for (String item : parts)
{
chosenList.addElement(item);
System.out.println(item);
}
list_1.setModel(chosenList);
list_1.repaint();
}
catch (JAXBException e)
{
e.printStackTrace();
}
}
Parts.java
@XmlRootElement
public class Parts extends AbstractList<String>
{
/* This allows me to have a single instantiation of this class for
* adding the PC components before writing them to the XML file
*/
@XmlElement(name="item")
private List<String> list = new ArrayList<String>();
@Override
public boolean add(String element)
{
return list.add(element);
}
@Override
public String get(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
}
首先,您的 class 部分不完整。应该实现 get 和 size 方法。
@Override
public String get(int arg0) {
return list.get(arg0);
}
@Override
public int size() {
return list.size();
}
然后,解组为您提供一个 Parts 对象,而不是字符串列表。所以,它应该是:
Parts parts = (Parts) unmarshaller.unmarshal(file);
System.out.println(parts);
for (int i = 0; i < parts.size(); i++) {
chosenList.addElement(parts.get(i));
System.out.println(parts.get(i));
}
我正在尝试从下面的 XML 文件中读取:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<parts>
<item>CPU</item>
<item>GPU</item>
<item>PSU</item>
</parts>
我的目标是将项目添加到 DefaultDataModel,以便更新 JList。但是,当我进入 for each 循环时,没有任何内容添加到列表中,也没有任何内容打印到控制台。如果我做错了什么,有人可以告诉我吗?
public void load()
{
// First clear the JLit before loading anything
partList.clear();
chosenList.clear();
File file = new File("partsList.xml");
try
{
// Setup JAXB to create a list of strings from the XML file
JAXBContext context = JAXBContext.newInstance(Parts.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
// Read the XML file
List<String> parts = (List<String>) unmarshaller.unmarshal(file);
System.out.println(parts);
for (String item : parts)
{
chosenList.addElement(item);
System.out.println(item);
}
list_1.setModel(chosenList);
list_1.repaint();
}
catch (JAXBException e)
{
e.printStackTrace();
}
}
Parts.java
@XmlRootElement
public class Parts extends AbstractList<String>
{
/* This allows me to have a single instantiation of this class for
* adding the PC components before writing them to the XML file
*/
@XmlElement(name="item")
private List<String> list = new ArrayList<String>();
@Override
public boolean add(String element)
{
return list.add(element);
}
@Override
public String get(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public int size() {
// TODO Auto-generated method stub
return 0;
}
}
首先,您的 class 部分不完整。应该实现 get 和 size 方法。
@Override
public String get(int arg0) {
return list.get(arg0);
}
@Override
public int size() {
return list.size();
}
然后,解组为您提供一个 Parts 对象,而不是字符串列表。所以,它应该是:
Parts parts = (Parts) unmarshaller.unmarshal(file);
System.out.println(parts);
for (int i = 0; i < parts.size(); i++) {
chosenList.addElement(parts.get(i));
System.out.println(parts.get(i));
}