大佬教程收集整理的这篇文章主要介绍了JaxB - 嵌套元素值为空,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用 JAXB 将 XML 转换为对象。这是我的代码
<Root>
<Rname>jj</Rname>
<RID>55</RID>
<source>
<Code ID="17">
<Target name="A" ID="20" StartAt=".01">
</Target>
</Code>
</source>
</Root>
@XmlRootElement(name = "Root")
@XmlAccessorType(XmlAccesstype.FIELD)
public class Root {
public String Rname;
public int RID;
public source source;
//getter setter
}
@XmlRootElement(name = "source")
@XmlAccessorType(XmlAccesstype.FIELD)
public class source {
public Code Code;
//getter setter
}
@XmlRootElement(name = "Code")
@XmlAccessorType(XmlAccesstype.FIELD)
public class Code {
public Target Target;
public int id;
}
@XmlRootElement(name = "Target")
@XmlAccessorType(XmlAccesstype.FIELD)
public class Target {
public String name;
public String ID;
public String StartAt;
//getter setter
}
JAXB:
file xmlfile = new file("Root.xml");
JAXBContext jaxbContext;
try
{
jaxbContext = JAXBContext.newInstance(Root.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Root employee = (Root) jaxbUnmarshaller.unmarshal(xmlfilE);
System.out.println(employeE);
}
catch (JAXBException E)
{
e.printstacktrace();
}
我可以获取 Rname、RID 值,其他值为空。我哪里做错了?
对于 Java 属性(Name
、ID
、StartAt
)
解组后仍然为空,
您没有告诉 JAXB 这些对应于 XML 属性(如 StartAt="A"
)。
默认情况下,JAXB 假定它们对应于 XML 元素(如 <StartAt>.01</StartAt>
)。
您可以使用 @XmlAttribute
Annotation 修复您的代码。
因此,例如,而不是
public String StartAt;
你需要写
@XmlAttribute(name = "StartAt")
public String StartAt;
顺便说一句:最佳实践是从 Java 属性开始 用小写字母代替大写字母。 所以你可以更好地写
@XmlAttribute(name = "StartAt")
public String startAt;
您仍然会得到正确的大写 XML 属性名称(此处为 StartAt
)
通过在 name="StartAt"
注释中指定 @XmlAttribute
。
XML 元素对应的 Java 属性也同样推荐
通过使用 @XmlElement
Annotation。
比如说
@XmlElement(name = "RName")
public String rName;
以上是大佬教程为你收集整理的JaxB - 嵌套元素值为空全部内容,希望文章能够帮你解决JaxB - 嵌套元素值为空所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。