Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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 Jaxb和无序集,每个元素都有单独的列表_Java_Xml_Jaxb_Xjc - Fatal编程技术网

Java Jaxb和无序集,每个元素都有单独的列表

Java Jaxb和无序集,每个元素都有单独的列表,java,xml,jaxb,xjc,Java,Xml,Jaxb,Xjc,我有一个带有序列的xml模式 <xs:sequence> <xs:element maxOccurs="unbounded" ref="x"/> <xs:element maxOccurs="unbounded" ref="y"/> </xs:sequence> 在这种情况下,所有x必须出现在所有y之前。 那不是我想要的。所以我尝试了choice,但当使用它时,当我生成相应的类时,所有的x和y都映射到列表中 有没有一种方法可以

我有一个带有序列的xml模式

<xs:sequence>
    <xs:element maxOccurs="unbounded" ref="x"/>
    <xs:element maxOccurs="unbounded" ref="y"/>
</xs:sequence>

在这种情况下,所有
x
必须出现在所有
y
之前。 那不是我想要的。所以我尝试了choice,但当使用它时,当我生成相应的类时,所有的x和y都映射到列表中

有没有一种方法可以在xml中没有特殊顺序的情况下为x和y单独列出列表?

在解组时,实现对xml元素的顺序非常宽容。下面我将用一个例子来演示

根目录

下面是一个具有单独
列表
属性的域对象

package forum11519412;

import java.util.List;
import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    List<String> x;
    List<Integer> y;

}
演示

演示代码将解组
input.xml
,并将其封送回

package forum11519412;

import java.io.File;
import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("src/forum11519412/input.xml");
        Root root = (Root) unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(root, System.out);
    }

}
输出

在生成的XML中,内容将按顺序显示

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <x>A</x>
    <x>B</x>
    <x>C</x>
    <y>1</y>
    <y>2</y>
    <y>3</y>
</root>

A.
B
C
1.
2.
3.

您当前的课程结构是什么?请在这里描述一下,我相信你有一个很好的最终答案,可以模拟所要求的结果,但是OP正在寻找一种方法来从他的XSD生成你提供的根。我相信,某种xjc绑定魔法正是人们所要求的。手工编写类,忽略模式,是个坏消息。你是作者。好。我就期待着xjc制作的课程。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <x>A</x>
    <x>B</x>
    <x>C</x>
    <y>1</y>
    <y>2</y>
    <y>3</y>
</root>