Java JAXB:按特定顺序具有多个相同类型的标记
我有一种非常不寻常的XML格式需要整理和解整理:Java JAXB:按特定顺序具有多个相同类型的标记,java,xml,jaxb,Java,Xml,Jaxb,我有一种非常不寻常的XML格式需要整理和解整理: <a> <b></b> <c></c> <d></d> <c></c> <d></d> </a> 我本来希望工作但没有工作的代码是: @XmlAccessorType(XmlAccessType.NONE) @XmlType(propOrder={"b", "eList"}) @
<a>
<b></b>
<c></c>
<d></d>
<c></c>
<d></d>
</a>
我本来希望工作但没有工作的代码是:
@XmlAccessorType(XmlAccessType.NONE)
@XmlType(propOrder={"b", "eList"})
@XmlRootElement(name="a")
public class A {
@XmlElement(name="b")
private String b;
@XmlElementRefs({
@XmlElementRef(name="c", type=String.class),
@XmlElementRef(name="d", type=String.class)
})
@XmlMixed
private List<String> eList;
}
@xmlacessortype(xmlacesstype.NONE)
@XmlType(proporter={“b”,“eList”})
@XmlRootElement(name=“a”)
公共A类{
@xmlement(name=“b”)
私有字符串b;
@XmlElementRefs({
@xmlementref(name=“c”,type=String.class),
@xmlementref(name=“d”,type=String.class)
})
@混合
私人名单;
}
很遗憾,结果缺少正确的顺序(我需要b、c、d、c、d顺序):
我尝试了不同的方法,比如@XmlMixed,使用@XmlPath的子对象,但没有任何效果。有什么提示或链接吗?提前谢谢 我建议您采用以下解决方案
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "a", propOrder = {
"bs",
"cs",
"ds"
})
@XmlRootElement(name = "a")
public class A
implements Serializable
{
private final static long serialVersionUID = 1234567890L;
@XmlElement(name = "b")
protected List<String> bs;
@XmlElement(name = "c")
protected List<String> cs;
@XmlElement(name = "d")
protected List<String> ds;
public List<String> getBS() {
if (bs == null) {
bs = new ArrayList<String>();
}
return this.bs;
}
public List<String> getCS() {
if (cs == null) {
cs = new ArrayList<String>();
}
return this.cs;
}
public List<String> getDS() {
if (ds == null) {
ds = new ArrayList<String>();
}
return this.ds;
}
}
@xmlacessortype(xmlacesstype.FIELD)
@XmlType(name=“a”,比例器={
“bs”,
“cs”,
“ds”
})
@XmlRootElement(name=“a”)
公共A类
实现序列化接口
{
私有最终静态长serialVersionUID=1234567890L;
@xmlement(name=“b”)
受保护名单;
@xmlement(name=“c”)
受保护名单;
@xmlement(name=“d”)
受保护名单;
公共列表getBS(){
如果(bs==null){
bs=新的ArrayList();
}
返回此文件。b;
}
公共列表getCS(){
如果(cs==null){
cs=新的ArrayList();
}
返回此.cs;
}
公共列表getDS(){
如果(ds==null){
ds=新的ArrayList();
}
把这个还给我;
}
}
您还可以应用xsd验证
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified"
targetNamespace="http://yourNamespace" xmlns="http://yourNamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="a" type="a" />
<xs:complexType name="a">
<xs:sequence>
<xs:element name="b" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="c" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="d" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:schema>
我不介意使用不同的JAXB提供程序。因此,使用MOXY等的建议是受欢迎的!你解决这个问题了吗?如果是,您是如何解决的?
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified"
targetNamespace="http://yourNamespace" xmlns="http://yourNamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="a" type="a" />
<xs:complexType name="a">
<xs:sequence>
<xs:element name="b" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="c" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="d" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:schema>