我有这个架构:
<xs:complexType name="foo">
<xs:sequence>
<xs:element name="oneBar" type="xs:string" minOccurs="0"/>
<xs:element name="twoBar" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
当我试图解散这个
时<foo>
<oneBar>1</oneBar>
<twoBar>2</twoBar>
</foo>
它有效 但是当我试图解组这个xml:
<foo>
<twoBar>2</twoBar>
<oneBar>1</oneBar>
</foo>
我得到了一个excelption,因为它关心订单 如果我试图在不使用模式的情况下解组相同的xml,它在两种情况下都可以工作 有什么想法吗?
正如Strawberry所指出的,如果你用sc替换xs:sequence:任何顺序都不重要,你们中的任何人都知道我需要在我的课程中添加什么注释,这样才能生成xs:任何schmea
通过从xs:any模式创建类来找到解决方案 您只需要使用XmlType注释您的类,并将prop命令设置为空,请参阅:
@XmlRootElement
@XmlType(name="foo",propOrder={})
public class Foo {
@XmlElement
public String oneBar;
@XmlElement
public String twoBar;
}
答案 0 :(得分:5)
序列要求元素按顺序排列,例如from w3schools页面: -
指标指定 子元素必须出现在 特定订单:
在没有架构的情况下进行解组时,实际上并没有验证XML。
如果您希望您的架构不需要特定的排序,那么以下内容应该这样做: -
<xs:complexType name="foo">
<xs:all>
<xs:element name="oneBar" type="xs:string" minOccurs="0"/>
<xs:element name="twoBar" type="xs:string" minOccurs="0"/>
</xs:all>
</xs:complexType>
从Java注释的角度来看它。如果我有一个名为Test
的类,其中包含两个字符串字段test1
和test2
,则注释将为: -
有序案件,例如使用<sequence>
@XmlType(name="",propOrder={"test1","test2"})
@XmlRootElement(name="test")
public class Test
{
@XmlElement(required=true)
private String test1;
@XmlElement(required=true)
private String test2;
}
无序案件,例如使用<all>
@XmlType(name="",propOrder={})
@XmlRootElement(name="test")
public class Test
{
@XmlElement(required=true)
private String test1;
@XmlElement(required=true)
private String test2;
}