JAXB 嵌套 XML - 列出<Object>具有属性的相同名称:无法显示 XML 数据



我有一个xml,看起来像这个

<?xml version="1.0" encoding="UTF-8"?>
<TestCases>
<TestCase id="TC04">
<statement sequence="1">This is TC04, statement 1</statement>
<statement sequence="2">This is TC04, statement 2</statement>
<statement sequence="3">This is TC04, statement 3</statement>
<statement sequence="4">This is TC04, statement 4</statement>
</TestCase>
<TestCase id="TC05">
<statement sequence="1">This is TC05, statement 1</statement>
<statement sequence="2">This is TC05, statement 2</statement>
<statement sequence="3">This is TC05, statement 3</statement>
<statement sequence="4">This is TC05, statement 4</statement>
</TestCase>
</TestCases>

到目前为止,我已经能够在TestCase下获得所有的TestCase并显示序列号。

TC041=空,2=空,3=空,4=空TC051=空,2=空,3=空,4=空

但是,当显示这些值时,我会得到null。我认为这需要一个XMLAdapter,但我不熟悉也无法理解如何创建一个读取/存储语句节点的属性和xml数据的Adapter。

下面是我的Java代码。

package Test;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "TestCases")
public class TestCases {
@XmlElement(name = "TestCase")
private List<TestCase> testcases;
public List<TestCase> getTestCases() {
if (this.testcases == null)
this.testcases = new ArrayList<TestCase>();
return testcases;
}
@XmlRootElement(name = "TestCase")
public static class TestCase {
@XmlAttribute(name = "id")
private String id;
public String getId() {
return this.id;
}
@XmlElement(name = "statement")
public List<Statement> statements;
public List<Statement> getStatements() {
if (this.statements == null)
this.statements = new ArrayList<Statement>();
return statements;
}
@XmlRootElement(name = "statement")
public static class Statement {
private String name;
@XmlAttribute(name = "sequence")
private String sequence;
public String getSequence() {
return this.sequence;
}
public String getStatement() {
return this.name;
}
}
}
}
  1. 您应该只在TestCases上使用@XmlRootElement
  2. 您可能还需要在name上使用@XmlValue,然后添加@XmlAccessorType(XmlAccessType.FIELD)。这篇文章可能会有所帮助。

    @XmlRootElement(name = "TestCases")
    public class TestCases {
    @XmlElement(name = "TestCase")
    private List<TestCase> testcases;
    public List<TestCase> getTestCases() {
    if (this.testcases == null)
    this.testcases = new ArrayList<TestCase>();
    return testcases;
    }
    public static class TestCase {
    @XmlAttribute(name = "id")
    private String id;
    public String getId() {
    return this.id;
    }
    @XmlElement(name = "statement")
    public List<Statement> statements;
    public List<Statement> getStatements() {
    if (this.statements == null)
    this.statements = new ArrayList<Statement>();
    return statements;
    }
    @XmlAccessorType(XmlAccessType.FIELD)
    public static class Statement {
    @XmlValue
    private String name;
    @XmlAttribute(name = "sequence")
    private String sequence;
    public String getSequence() {
    return this.sequence;
    }
    public String getStatement() {
    return this.name;
    }
    }
    }
    }
    

最新更新