1

私のXMLは次のようになります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<results>
<version>1.0</version>
<status>ok</status>
<lastUpdate>2011-11-21 09:23:59.0</lastUpdate>
<total>2</total>
<row>
<areaId></areaId>
<nameEng></nameEng>
<nameGer></nameGer>
</row>
 … more <row></row> blocks …
</results>

どうすればこれを達成できますか..?現時点では次のようになっていますが、album2を文字列として出力ストリームに戻す方法がわかりません...

List<Row> rows = new ArrayList<Row>();

        while(rs.next()){
            int albumId = rs.getInt(1);
            int bookDocId = rs.getInt(2);
            String picUrl = rs.getString(3);
            String descEng = rs.getString(4);
            String descGer = rs.getString(5);

            Row row = new Row();
            row.setAlbumId(albumId);
            row.setBookDocId(bookDocId);
            row.setPicUrl(picUrl);
            row.setDescEng(descEng);
            row.setDescGer(descGer);

            rows.add(row);
        }

        Album album = new Album();
        album.setRows(rows);

        File file = new File("album.xml");
        JAXB.marshal(album, file);

        Album album2 = JAXB.unmarshal(file, Album.class);

        file.deleteOnExit();

編集:

@XmlRootElement
public class Album {

    private List<Row> rows = new ArrayList<Row>();

    @XmlElement(name="row")
    public List<Row> getRows(){
        return this.rows;
    }

    public void setRows(List<Row> rows){
        this.rows = rows;
    }

Row.class:

public class Row {
    private int albumId;
    private int bookDocId;
    private String picUrl;
    private String descEng;
    private String descGer; 

    public int getAlbumId() {
        return albumId;
    }
    public int getBookDocId() {
        return bookDocId;
    }
    public String getPicUrl() {
        return picUrl;
    }
    public String getDescEng() {
        return descEng;
    }
    public String getDescGer() {
        return descGer;
    }
    public void setAlbumId(int albumId) {
        this.albumId = albumId;
    }
    public void setBookDocId(int bookDocId) {
        this.bookDocId = bookDocId;
    }
    public void setPicUrl(String picUrl) {
        this.picUrl = picUrl;
    }
    public void setDescEng(String descEng) {
        this.descEng = descEng;
    }
    public void setDescGer(String descGer) {
        this.descGer = descGer;
    }
}
}
4

2 に答える 2

3

これは私のコードです、それはうまくいきます

@javax.xml.bind.annotation.XmlType
@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
public class Album 
{
   long version;

   String status;

   java.util.List<Row> rows;

}  


@javax.xml.bind.annotation.XmlType
@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD)
public class Row 
{
   String areaId;

   String nameEng;

   String nameGer;
}  

テスト

public static void main(final String[] args) throws IOException
   {
      Album al = new Album();
      List<Row> rows = new ArrayList<Row>();
      final Row row1 = new Row();
      row1.areaId = "area1";
      row1.nameEng = "eng1";
      row1.nameGer = "ger1";
      final Row row2 = new Row();
      row2.areaId = "area2";
      row2.nameEng = "eng2";
      row2.nameGer = "ger2";
      rows.add(row2);
      rows.add(row1);
      al.status = "stat";
      al.rows = rows;
      final File file = new File("D:/test.xml");
      final FileOutputStream out = new FileOutputStream(file);

      JAXB.marshal(al, out);  

      final Album after = JAXB.unmarshal(file, Album.class);
      assert after.status.equals(al.status);
      assert after.rows.size() == al.rows.size();
   }  

privateゲッター、セッター へのアクセスを変更したり、追加したりできます

String使用 のように戻るには

  ByteArrayOutputStream output = new ByteArrayOutputStream();
  JAXB.marshal(al, output); 
  output.toString();
于 2012-06-15T07:42:28.237 に答える
1

アルバムをファイルに書き込むのではなく、出力ストリームに書き込む方法を尋ねている場合、答えは簡単です:JAXB.marshal(Object、OutputStream)

アルバムをXML文字列に変換する方法を尋ねている場合、答えも簡単です:JAXB.marshal(Object、String)

他に質問がある場合は、質問を明確にしてください。

于 2012-06-15T07:30:51.170 に答える