3

POJOを介してJAXBアノテーションを使用してバインドしたい次のxml形式があります。XML 形式は次のとおりです。

 <datas>
   <data>apple<data>
   <data>banana<data>
   <data>orange<data>
 <datas>

そして、次のPOJOを介してデータをバインドしようとしています:

@XmlRootElement()
@XmlAccessorType(XmlAccessType.FIELD)
public class Datas {

  @XmlElement
  private List<String> data;

  //get/set methods

}

また、私はこのPOJOを試してみました:

@XmlRootElement()
@XmlAccessorType(XmlAccessType.FIELD)
public class Datas {

  @XmlElement
  private List<Data> datas;

  //get/set methods

}

///

@XmlRootElement()
@XmlAccessorType(XmlAccessType.FIELD)
public class Data{

  @XmlElement
  private String data;

  //get/set methods

}

最初のケースでは、最初のデータのみを取得します: apple. 2 番目のケースでは、何も取得しません。すべてのデータをバインドするために、誰かが適切な POJO と注釈を提供するのを手伝ってくれませんか?

4

2 に答える 2

4

次のいずれかのオプションを実行できます。

オプション1

データ

package forum11311374;

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Datas {

  private List<String> data;

  //get/set methods

}

詳細については


オプション #2

データ

package forum11311374;

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Datas {

  @XmlElement(name="data")
  private List<Data> datas;

  //get/set methods

}

データ

package forum11311374;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
public class Data{

  @XmlValue
  private String data;

  //get/set methods

}

詳細については


以下は、両方のオプションで使用できます。

input.xml/出力

XML ドキュメントを更新して、必要な終了タグを含めました。 <data>apple</data>の代わりに<data>apple<data>

<datas>
   <data>apple</data>
   <data>banana</data>
   <data>orange</data>
 </datas>

デモ

package forum11311374;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Datas.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum11311374/input.xml");
        Datas datas = (Datas) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(datas, System.out);
    }

}
于 2012-07-03T13:19:12.420 に答える
1

最初のオプションはうまくいきました...なぜ問題が発生するのかわかりません...この注釈を試してください...

@XmlElements(@XmlElement(name="data", type=String.class))
private List<String> datas; //ignore the variable name
于 2012-07-03T13:47:11.393 に答える