java JAXB 解组集合
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5664857/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 12:10:51 来源:igfitidea点击:
JAXB unmarshall a collection
提问by jwesonga
I have an XML doc:
我有一个 XML 文档:
<?xml version="1.0" encoding="UTF-8"?>
<Log>
<logEntry>
<severity>WARN</severity>
<dateTime>2011-03-17 15:25</dateTime>
<message>Here is the text from the application</message>
<class>(class name)</class>
<program> TB Reception</program>
</logEntry>
<logEntry>
<severity>WARN</severity>
<dateTime>2011-03-17 15:25</dateTime>
<message>Here is the text from the application</message>
<class>(class name)</class>
<program> TB Reception</program>
</logEntry>
</Log>
and two POJOs:
和两个 POJO:
package org.jwes.jaxb.jax;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Log")
public class Log {
@XmlElementWrapper(name = "logEntry")
private List<LogEntry> logList;
public List<LogEntry> getLogEntries() {
return logList;
}
public void setLogEntries(List<LogEntry> logList) {
this.logList = logList;
}
}
package org.jwes.jaxb.jax;
import java.io.Serializable;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name="LogEntry")
public class LogEntry{
private String source;
private String message;
private String severity;
private String program;
private String className;
public String getSource() {
return source;
}
public void setSource(String source) {
this.source = source;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getSeverity() {
return severity;
}
public void setSeverity(String severity) {
this.severity = severity;
}
public String getProgram() {
return program;
}
public void setProgram(String program) {
this.program = program;
}
@XmlElement(name = "class")
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
}
I'd like to retrieve the values of the XML nodes using JAXB. I wrote this quick code:
我想使用 JAXB 检索 XML 节点的值。我写了这个快速代码:
public class App
{
public static void main( String[] args ) throws JAXBException, IOException
{
JAXBContext jc = JAXBContext.newInstance(Log.class);
Unmarshaller um = jc.createUnmarshaller();
Log logElement=(Log)um.unmarshal(new FileReader("src/main/resources/log.xml"));
System.out.println(logElement.getLogEntries().toArray().length);
}
}
When i run it I always get value of zero.
当我运行它时,我总是得到零值。
采纳答案by skaffman
You shouldn't be using @XmlElementWrapper
here, just @XmlElement
:
你不应该@XmlElementWrapper
在这里使用,只是@XmlElement
:
@XmlRootElement(name="Log")
public class Log {
@XmlElement(name = "logEntry")
private List<LogEntry> logList;