Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java xstream展平对象_Java_Xml_Xml Serialization_Xstream - Fatal编程技术网

Java xstream展平对象

Java xstream展平对象,java,xml,xml-serialization,xstream,Java,Xml,Xml Serialization,Xstream,我正在尝试使用转换器/封送处理来平坦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>

我正在尝试使用转换器/封送处理来平坦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>

我找到了一个暂时的解决办法,尽管它不是最好的

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

public boolean canConvert(Class c)
{
    return A.class == c;
}
因为我必须定义所有的类A,所以这需要做更多的工作,尤其是在真正的XML对象中,而不是我设计的示例。 有人知道只在内部类B上使用转换器获得相同结果的方法吗

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

根据您与XStream的联系程度,您可以通过使用@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的映射的信息,请参阅:


谢谢,但是在将现有代码切换到MOXy之前,我希望在XStream中找到一个同样好的解决方案,我只是不知道这个问题。如果您想移植,请随时与我联系:。查看我的博客文章,比较JAXB和XStream:
public boolean canConvert(Class c)
{
    return B.class == c;
}
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; 
}