2017-04-30 4 views
2

aid属性のanswernameタグを、次のXMLからJavaのフィールドaidAnswerクラスにマップできません。JAXBアンマーシャリング - 子要素の属性をJavaオブジェクトにマップ

助けていただければ幸いです。前もって感謝します。

XML:

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

Javaクラス:

Question.java

package com.deere.ruleEngine.service; 

import java.util.List; 

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

@XmlRootElement 
public class Question { 
private int id; 
private String questionname; 
private List<Answer> answers; 
public Question() {} 
public Question(int id, String questionname, List<Answer> answers) { 
    super(); 
    this.id = id; 
    this.questionname = questionname; 
    this.answers = answers; 
} 
@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; 
} 
} 

Answer.java

package com.deere.ruleEngine.service; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlAttribute; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Answer { 
    @XmlAttribute(name="aid") 
private int aid; 
private String answername; 
private String postedby; 
public Answer() {} 
public Answer(int id, String answername, String postedby) { 
    super(); 
    this.aid = id; 
    this.answername = answername; 
    this.postedby = postedby; 
} 

public int getId() { 
    return aid; 
} 
public void setId(int id) { 
    this.aid = 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; 
} 

} 

電流出力:

1 What is java? 
Answers: 
0 java is a programming language ravi 
0 java is a platform john 

所望の出力:援助プロパティの

1 What is java? 
Answers: 
101 java is a programming language ravi 
102 java is a platform john 
+1

を私は答えを知りません、 「電流出力」と「希望出力」に1を加えたものです。私は誰もがそのような質問を書いていたと思います。 –

+0

ありがとう皆さん@TimurA、Thomas、George –

答えて

2

@TimurAは既に述べたように、JavaクラスはXMLファイルの<answername>要素と一致しません。 XMLファイルの構造を保持したい場合は、Javaクラスを変更する必要があります。あなたのAnswerクラスで

aidプロパティを削除 とanswername財産の種類に変更:

@XmlAccessorType(XmlAccessType.FIELD) 
public class Answer { 
    private Answername answername; 
    private String postedby; 

    // + constructors, getters, setters 
} 

Answernameための別のクラスを作成します。

@XmlAccessorType(XmlAccessType.FIELD) 
public class Answername { 

    @XmlAttribute 
    private int aid; 

    @XmlValue 
    private String text; 

    // + constructors, getters, setters 
} 
0

セッターとゲッターは、右の名前が付けられていません。 getAidsetAidにそれぞれ名前を変更します。

1

XMLでは、 "aid"はAnswerオブジェクトではなく "answername"の属性です。 XMLを変更しても構わないのであれば、それを1段階上に移動するだけです。

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

あなたが同じXMLを維持したいならば、あなただけの「援助」属性と値の要素を別のクラス「answername」を作成する必要があり、その答えは、要素としてそれを持っています。

関連する問題