我试图使用转换器/编组来平滑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();
}
答案 0 :(得分:0)
我找到了一个临时解决方案,虽然它不是最好的。
如果我设置我的canConvert函数来检查周围的对象A而不是B,我可以操纵整个内部对象。
public boolean canConvert(Class c)
{
return A.class == c;
}
由于我必须定义所有类A,因此这需要做更多的工作(尤其是在真正的XML对象中,而不是我设计的示例)。 有没有人知道如何使用内部B类的转换器获得相同的结果?
public boolean canConvert(Class c)
{
return B.class == c;
}
答案 1 :(得分:0)
根据您与XStream的关联程度,您可以使用@XmlPath注释在EclipseLink MOXy中轻松完成此操作:
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的映射的信息,请参阅: