JAXB 从 child 获取属性值
JAXB getting Attribute value from child
我似乎无法从 xml 中的 Child 获取属性信息。我尝试了几种不同的方法,但没有一种有效。 (从 parent 获取属性信息工作正常)
- 我正在使用 JAXB 库
- XML 是嵌套的 -+ 300K 行
这是我的简短版本 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
也不会为空。
我似乎无法从 xml 中的 Child 获取属性信息。我尝试了几种不同的方法,但没有一种有效。 (从 parent 获取属性信息工作正常)
- 我正在使用 JAXB 库
- XML 是嵌套的 -+ 300K 行
这是我的简短版本 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
也不会为空。