【问题标题】:How to alias the data type using XStream?如何使用 XStream 为数据类型设置别名?
【发布时间】:2015-01-28 11:22:12
【问题描述】:

我想将对象转换为需要为字符串数据类型提供别名的 xml。例如:

public class ArrayTest
{
   private int id=4;
   public String area[];
   public void setArea(String ar[])
  {
    area = ar;
  }
}

对象到xml的转换类是这样的:

public class Test
{
  public static void main(String args[])
  {
       String area[] = {"ABC","XYZ","PRQ"};
       ArrayTest at = new ArrayTest();
       at.setArea(area);
       Xstream stream = new XStream(new staxDriver());
       stream.alias("response",ArrayTest.class);
       System.out.println(stream.toXML(at));
  }
}

我得到的输出是:

<?xml version="1.0" ?>
<response>
  <id>4</id>
  <area>
    <string>ABC</string>
    <string>XYZ</string>
    <string>PRQ</string>
  </area>
</response>

但我想输出如下:

<?xml version="1.0" ?>
<response>
  <id>4</id>
  <area>
    <code>ABC</code>
    <code>XYZ</code>
    <code>PRQ</code>
  </area>
</response>

我是 XStream 新手,请帮帮我

【问题讨论】:

  • 我猜 @XStreamImplicit(itemFieldName="code") 超过 public String area[]; 是你要找的东西:xstream.codehaus.org/…
  • @Albert:我也试过了,但输出不是我所期望的......
  • 如@jjlema 所说,以编程方式尝试。
  • @Albert Itried 这种方式也...请参阅下面的评论我提到的输出不是我所期望的......如果可能的话,请提供一些其他方法

标签: java xstream stax


【解决方案1】:

我认为这可行:

首先为area添加一个getter

public class ArrayTest {
    private int id = 4;
    private String[] area; 

    public void setArea(String ar[]) {
        area = ar;
    }

    public String[] getArea() { 
        return area;
    }
}

然后添加一个NamedArrayConverter转换器:

public static void main(String args[]) {
    String area[] = { "ABC", "XYZ", "PRQ" };
    ArrayTest at = new ArrayTest();
    at.setArea(area);
    XStream stream = new XStream();
    stream.alias("response",ArrayTest.class);
    stream.registerConverter(new NamedArrayConverter(at.getArea().getClass(), null, "code"));
    System.out.println(stream.toXML(at));
}

这是输出:

<response>
  <id>4</id>
  <area>
    <code>ABC</code>
    <code>XYZ</code>
    <code>PRQ</code>
  </area>
</response>

【讨论】:

    【解决方案2】:

    你可以使用:

    stream.addImplicitArray(ArrayTest.class, "area", "code");
    

    【讨论】:

    • 我也试过了,但输出不是我所期望的。输出将是 &lt;?xml version="1.0" ?&gt;&lt;response&gt; &lt;id&gt;4&lt;/id&lt;code&gt;ABC&lt;/code&gt;&lt;code&gt;XYZ&lt;/code&gt;&lt;code&gt;PRQ&lt;/code&gt;&lt;/response&gt; 这里缺少 标签,但我也想要这个
    猜你喜欢
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多