0

我正在尝试使用转换器/封送处理来展平 xstream 的 xml 输出,但没有成功。例如,

public class A{
    public B b;
    public int F;
    public String G; 
}

public class B{
    public String C;
    public String D;
    public int E;
}

输出为

<A>
  <B>
     <C></C>
     <D></D>
     <E></E>
  </B>
  <F></F>
  <G></G>
</A>

但是我需要

<A>
  <C></C>
  <D></D>
  <E></E>
  <F></F>
  <G></G>
</A>

这可能吗?如何摆脱B?(C、D、E 是唯一命名的)。谢谢。到目前为止,我的尝试是

...    
public void marshal(Object value, HierarchicalStreamWriter writer,
    MarshallingContext context)
{
    B b = (B) value;
    writer.startNode("C");
    writer.setValue(b.getC());
    writer.endNode();

    writer.startNode("D");
    writer.setValue(b.getD());
    writer.endNode();

    writer.startNode("E");
    writer.setValue(b.getE());
    writer.endNode();
}
4

2 回答 2

0

我找到了一个临时解决方案,虽然它不是最好的。

如果我将我的 canConvert 函数设置为检查周围的对象 A 而不是 B,我可以操纵整个内部对象。

public boolean canConvert(Class c)
{
    return A.class == c;
}

因为我必须定义所有的 A 类,所以需要做更多的工作(尤其是在真正的 XML 对象中,而不是我设计的示例中)。有谁知道仅在内部类 B 上使用 Converter 获得相同结果的方法?

public boolean canConvert(Class c)
{
    return B.class == c;
}
于 2010-07-09T22:48:14.933 回答
0

根据您与 XStream 的联系程度,您可以在EclipseLink MOXy中使用 @XmlPath 注释很容易地做到这一点:

public class A{ 
    @XmlPath(".") public B b; 
    public int F; 
    public String G;  
} 

public class B{ 
    public String C; 
    public String D; 
    public int E; 
} 

有关 MOXy 基于 XPath 的映射的信息,请参阅:

于 2010-07-15T20:51:12.867 回答