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

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 ベースのマッピングについては、次を参照してください。

于 2010-07-15T20:51:12.867 に答える
0

最善ではありませんが、一時的な解決策を見つけました。

B ではなく周囲のオブジェクト A をチェックするように canConvert 関数を設定すると、内側のオブジェクト全体を操作できます。

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 に答える