代码之家  ›  专栏  ›  技术社区  ›  brian_d

xstream展平对象

  •  0
  • brian_d  · 技术社区  · 15 年前

    我正在尝试使用转换器/封送来平展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();
    }
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   bdoughan    15 年前

    根据您与XStream的关系,您可以很容易地在 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的映射的信息,请参见:

        2
  •  0
  •   brian_d    15 年前

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

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

    由于我必须定义所有的类A,这需要做更多的工作(特别是在一个真正的XML对象中,而不是在我设计的示例中)。 有没有人知道一种方法,只在内部类B上使用转换器就可以得到相同的结果?

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