【发布时间】:2017-06-28 21:30:08
【问题描述】:
我正在尝试利用 JAXB 将从 youtube rss 提要获得的 xml 元素转换为对象。我似乎遵循了我见过的大多数示例的结构,但仍然无法使其工作,因为提要中的列表似乎总是空的。有谁知道如何解决这一问题? 以下是我的课程供参考:
饲料类:
import java.util.List;
import javax.xml.bind.annotation.*;
import javax.xml.*;
@XmlRootElement(
name = "feed",
namespace = "http://www.w3.org/2005/Atom"
)
@XmlAccessorType (XmlAccessType.FIELD)
public class feed {
@XmlElement(name = "entry")
private List<entry> entries;
public List<entry> getEntry() {
return this.entries;
}
public void setEntry(List<entry> entries) {
this.entries = entries;
}
}
入门类:
import javax.xml.bind.annotation.*;
import java.util.List;
@XmlRootElement(name = "entry")
@XmlAccessorType(XmlAccessType.FIELD)
public class entry {
private String title, name, id, published;
public void settitle(String title){this.title = title;}
public String gettitle(){return title;}
public void setname(String name){this.name = name;};
public String getname() {
return name;
}
public void setid(String id){this.id = id;}
public String getid() {
return id;
}
public void setpublished(String published){this.published = published;}
public String getpublished() {return published;}
public void PrintVideoInfo(){
System.out.println(gettitle());
System.out.println(getname());
System.out.println(getid());
System.out.println(getpublished());
System.out.println("-----------");
}
}
解组类:
import java.io.File;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class XMLtoObject {
public static void main(String[] args) {
try {
File file = new File("videos.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(feed.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
feed que= (feed) jaxbUnmarshaller.unmarshal(file);
for(entry ent:que.getEntry())
ent.PrintVideoInfo();
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
https://www.youtube.com/feeds/videos.xml?channel_id=UCBcRF18a7Qf58cCRy5xuWwQ 这是正在使用的 xml。它保存为videos.xml并且文件路径是正确的,只是在上面的sn-p中没有完全包含隐私。任何帮助将不胜感激。
【问题讨论】:
-
尝试在setter中放置一个断点。如果它中断检查内容
-
@efekctive 在使用断点进行测试后,它进入了提要类并命中了@xmlelement(name = "entry") 行,但是它根本没有进入入口类。是因为我只是想说明 XML 文件中的特定信息而不是全部信息吗?
-
也就是说:“setEntry(List
entries)”中的参数条目为null还是为空? -
Entry 类除了根元素没有注释。它需要类似 "@XmlElement(name = "entry")" 如果可行,我会将其作为答案发布
-
您是说在 Entry 类中为每个变量放置一个 @XmlElement(name = variable) 吗?参数条目可能为空,我不完全确定在解组过程中是否有任何东西将列表传递给它。