Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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 将一个对象结构映射到不同的XML结构_Java_Xml_Xml Serialization - Fatal编程技术网

Java 将一个对象结构映射到不同的XML结构

Java 将一个对象结构映射到不同的XML结构,java,xml,xml-serialization,Java,Xml,Xml Serialization,我有一个类似于以下内容的对象: 公共类FooObj { 私人长id; 私有列表子基; 私有字符串someStr; 公共长getId() { 返回id; } 公共列表getSubBar() { 返回底基层; } 公共字符串getSomeStr() { 返回sometr; } 公共无效集合id(长id) { this.id=id; } 公共无效设置子栏(列表子栏) { 此。底基层=底基层; } public void setSomeStr(字符串someStr) { this.someStr=som

我有一个类似于以下内容的对象:

公共类FooObj
{
私人长id;
私有列表子基;
私有字符串someStr;
公共长getId()
{
返回id;
}
公共列表getSubBar()
{
返回底基层;
}
公共字符串getSomeStr()
{
返回sometr;
}
公共无效集合id(长id)
{
this.id=id;
}
公共无效设置子栏(列表子栏)
{
此。底基层=底基层;
}
public void setSomeStr(字符串someStr)
{
this.someStr=someStr;
}
公共静态类BarObj
{
私有字符串groupId;
私人长id;
公共字符串getGroupId()
{
返回groupId;
}
公共长getId()
{
返回id;
}
public void setGroupId(字符串groupId)
{
this.groupId=groupId;
}
公共无效集合id(长id)
{
this.id=id;
}
}
}
我想将对象映射到一个XML结构,比如链接:EDIT:(请查看ObjBars元素,以获得我要查找的内容的确切定义)


是否有任何可用的库允许我这样做?

所以您基本上是在将列表序列化为XML之前将其拆分为多个子列表?我认为JAXB在这方面确实可以帮助您。我认为您可以使用@XmlTypeAdapter在
List
List
之间进行转换,这将是一种表示此数据的方法,您希望将其编组为XML。查看详细信息

您可以使用JAXB,但您的类需要一些注释。看看,这不是我真正想要的。我没有试图生成XSD,我有一些现有的类,我想映射到一个与对象不完全匹配的XML结构。IE预定义的XML到预定义的对象。如果您想将预先存在的类与预先存在的XSD(XML结构)匹配,而这两者不匹配,那么我认为您无法自动完成。可能首先将对象转换为与XML结构完全匹配的对象,然后用JAXB序列化为XML。IE的一些注释或路径,我可以用来预先配置它。谢谢。我真希望我早一点看到这个!我现在比我发布这篇文章时更不乐观了。尝试使用XmlJavaTypeAdapter注释列表属性的几次尝试向我展示了JAXB将列表元素类型而不是列表本身传递给marshal()。因此,您最终需要在类级别使用XMLJavaTypeAdPath在您的类和一个具有1:1与XML映射的结构的类之间进行转换。本质上就是上面nakosspy所说的。你不能更改目标对象的原因是因为你不能控制代码,还是因为你试图保留接口?因为我认为您可以引入一种新的内部结构,将1:1映射到XML,而无需更改外部接口。一个是生成的类,另一个是我必须遵循的现有XML定义,但我认为这不是一个好的定义,所以我定义了新对象。