在解组xml文件时,Field属性将变为null

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在解组xml文件时,Field属性将变为null相关的知识,希望对你有一定的参考价值。

您好我正在尝试使用JAXB将xml文件转换为Java对象,我对java很新。我创建了pojo类并添加了一些注释,但我不确定它们是否正确?我在谷歌花了几个小时但却找不到什么问题。

这是我的xml:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>  
<question id="1">  
    <answers>  
        <answername>java is a programming language</answername>  
        <id>101</id>  
        <postedby>ravi</postedby>  
    </answers>  
    <answers>  
        <answername>java is a platform</answername>  
        <id>102</id>  
        <postedby>john</postedby>  
    </answers>  
    <questionname>What is java?</questionname>  
    <marks set=50>
       <longAnswer set=45/>
       <shortAnswer set=30/>
    </marks>
</question>   

Pojo课程:

@XmlRootElement(name="question") 
  public class Question {  
  private int id;  
  private String questionname;  
  private List<Answer> answers;  
  private List<Marks> marks;
  public Question() {}  
  public Question(int id, String questionname, List<Answer> answers, List<Marks> marks) {  
      super();  
      this.id = id;  
      this.questionname = questionname;  
      this.answers = answers; 
      this.marks = marks; 
  } 

  @XmlElement(name="marks") 
  public List<Marks> getMarks() {
    return marks;
  }
  public void setMarks(List<Marks> marks) {
    this.marks = marks;
  }
  @XmlAttribute  
  public int getId() {  
      return id;  
  }  
  public void setId(int id) {  
      this.id = id;  
  }  
  @XmlElement  
  public String getQuestionname() {  
      return questionname;  
  }  
  public void setQuestionname(String questionname) {  
      this.questionname = questionname;  
  }  
  @XmlElement  
  public List<Answer> getAnswers() {  
      return answers;  
  }  
  public void setAnswers(List<Answer> answers) {  
      this.answers = answers;  
  }  
  }


public class Answer {

  private int id;  
  private String answername;  
  private String postedby;  
  public Answer() {}  
  public Answer(int id, String answername, String postedby) {  
      super();  
      this.id = id;  
      this.answername = answername;  
      this.postedby = postedby;  
  }  
  public int getId() {  
      return id;  
  }  
  public void setId(int id) {  
      this.id = id;  
  }  
  public String getAnswername() {  
      return answername;  
  }  
  public void setAnswername(String answername) {  
      this.answername = answername;  
  }  
  public String getPostedby() {  
      return postedby;  
  }  
  public void setPostedby(String postedby) {  
      this.postedby = postedby;  
  }  
}



   import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;

public class Marks {

  private LongAnswer longAnswer ;
  private ShortAnswer shortAnswer;
  private String set;

  @XmlAttribute
  public String getSet() {
    return set;
  }
  public void setSet(String set) {
    this.set = set;
  }
  @XmlElement(name="longAnswer")
  public LongAnswer getLongAnswer() {
    return longAnswer;
  }
  public void setLongAnswer(LongAnswer longAnswer) {
    this.longAnswer = longAnswer;
  }

  @XmlElement(name="shortAnswer")
  public ShortAnswer getShortAnswer() {
    return shortAnswer;
  }
  public void setShortAnswer(ShortAnswer shortAnswer) {
    this.shortAnswer = shortAnswer;
  }


}

public class LongAnswer {

  private String set;

  public String getSet() {
    return set;
  }

  public void setSet(String set) {
    this.set = set;
  }


public class ShortAnswer {

  private String set;

  public String getSet() {
    return set;
  }

  public void setSet(String set) {
    this.set = set;
  }
}

谁能告诉我如何注释'标记'模型类以及如何设置'longAnswer'和'shortAnswer'字段。因为我得到它们的空值。

答案

你应该用set注释你的@XmlAttribute属性。否则它看起来很好。

您还可以为XML创建XML Schema并进行编译。

以上是关于在解组xml文件时,Field属性将变为null的主要内容,如果未能解决你的问题,请参考以下文章

JAXB:如何在解组 XML 文档期间忽略命名空间?

如何将 SOAP XML 解组为 Java 对象 [重复]

如何在 jax-ws 网络服务中解组 xml 文件

YouTube Android Player API 在解组时抛出“BadParcelableException ClassNotFoundException:asc”与新的 YouTube 版本

Java/JAXB:根据属性将 Xml 解组为特定子类

在 Android 中将 XML 文件解组为 Java 对象?