有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JAXB解组一个集合

我有一个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>

和两个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;
    }
}

我想使用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);


    }
}

当我运行它时,我总是得到零值


共 (1) 个答案

  1. # 1 楼答案

    你不应该在这里使用@XmlElementWrapper,只要@XmlElement

    @XmlRootElement(name="Log")
    public class Log {
        @XmlElement(name = "logEntry")
        private List<LogEntry> logList;