JAXB 从 child 获取属性值

JAXB getting Attribute value from child

我似乎无法从 xml 中的 Child 获取属性信息。我尝试了几种不同的方法,但没有一种有效。 (从 parent 获取属性信息工作正常)

这是我的简短版本 XML

<HarnessContainer xsi:noNamespaceSchemaLocation="xxx" Signature="15D823AAFC2CC91A61E1755C76E621"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Harness HarnessName="" HarnessDate="13.08.2019">
        <!--...-->
    </Harness>
</HarnessContainer>

这是我的parentclass

@XmlRootElement(name = "HarnessContainer")
@XmlAccessorType(XmlAccessType.FIELD)
public class HarnessContainer implements Serializable {


    private Harness harness;
    @XmlAttribute(name = "Signature")
    private String Signature;

    public HarnessContainer() {
    }

    public HarnessContainer(Harness harness, String signature) {
        this.harness = harness;
        Signature = signature;
    }
    //setters and getters
}

这是我的childclass

@XmlRootElement(name = "Harness")
@XmlAccessorType(XmlAccessType.FIELD)
public class Harness implements Serializable {


    @XmlAttribute(name = "HarnessDate")
    private String harnessDate;

    public Harness() {
    }

    public Harness(String harnessDate) {
        this.harnessDate = harnessDate;
    }
    //setters and getters
}

这是调用class

   public class main {

    public static void main(String[] args) throws JAXBException, IOException {

        File xmlFile = new File("C:\Users\Mini\Desktop\Desktop\file.xml");
        JAXBContext jaxbContext;
        try {
            jaxbContext = JAXBContext.newInstance(HarnessContainer.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();

            HarnessContainer harnessContainer = (HarnessContainer) jaxbUnmarshaller.unmarshal(xmlFile);

            System.out.println(harnessContainer.getHarness().getHarnessDate());

        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
}

我选择使用 @XmlAccessorType(XmlAccessType.FIELD) 是因为我计划有很多字段,而这种附件类型似乎最适合。我也尝试了不同的注释,但没有一个有效。

您的问题不是 Harness XML 属性没有被映射,您的问题是整个 Harness 对象没有被映射。

那是因为默认元素名称不是XML中的名称。要修复,请指定名称:

@XmlElement(name = "Harness")
private Harness harness;

harness 字段现在不会为空,harnessDate 也不会为空。