【问题标题】:Jaxb Arraylist OutputstreamJaxb Arraylist 输出流
【发布时间】:2012-06-15 07:01:30
【问题描述】:

我的 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>

我怎样才能做到这一点..? 目前我有以下内容.. 但我不知道如何将专辑 2 作为字符串返回到输出流...

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;
    }

行类:

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;
    }
}
}

【问题讨论】:

  • 更新返回字符串的答案

标签: java jaxb


【解决方案1】:

这是我的代码,效果很好

@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 的访问权限并添加getter、setter

要像String一样返回,请使用

  ByteArrayOutputStream output = new ByteArrayOutputStream();
  JAXB.marshal(al, output); 
  output.toString();

【讨论】:

    【解决方案2】:

    如果您询问如何将专辑写入输出流而不是将其写入文件,那么答案很简单:JAXB.marshal(Object, OutputStream)

    如果您要问如何将专辑转换为 XML 字符串,那么答案也很简单:JAXB.marshal(Object, String)

    如果您要问其他问题,请澄清您的问题。

    【讨论】:

    • 但这是一个包含行数组列表的专辑......这也像这样工作吗?
    • 为什么不呢?您的 Album 对象具有将对象映射到 XML 的 JAXB 注释。将必要的 JAXB 注解添加到 Row 类中,一切都会好起来的。
    • 顺便说一句..如果我有一个 Row 对象,是否可以定义仅在输出 xml 中使用的 getter 和 setter 不为空时?
    猜你喜欢
    • 2011-04-25
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多