程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了JaxB - 嵌套元素值为空大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决JaxB - 嵌套元素值为空?

开发过程中遇到JaxB - 嵌套元素值为空的问题如何解决?下面主要结合日常开发的经验,给出你关于JaxB - 嵌套元素值为空的解决方法建议,希望对你解决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 属性(NameIDStartAt) 解组后仍然为空, 您没有告诉 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,请注明来意。
标签:-