我有以下XML文件要解组
<root>
<emp>Google</emp>
<emp>Yahoo</emp>
<xyz>random</xyz>
</root>
我以下列方式使用了注释,
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class abc {
@XmlElement(name = "emp")
private String emp1;
@XmlElement(name = "emp")
private String emp2;
@XmlElement(name = "xyz")
private String xyz;
// added getters and setters for these fields
}
我的问题是在我想要的时候
obj.getEmp1(); // result is Yahoo instead of Google
obj.getEmp2(); // result is null.
请告诉我,我做错了什么?
答案 0 :(得分:4)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。
标准JAXB(JSR-222)注释不支持将2个不同的属性映射到同一XML元素。
您可以在此用例中使用EclipseLink JAXB(MOXy)的@XmlPath
扩展名。
import javax.xml.bind.annotation.*;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class abc {
@XmlPath("emp[1]/text()")
private String emp1;
@XmlPath("emp[2]/text()")
private String emp2;
@XmlElement(name = "xyz")
private String xyz;
// added getters and setters for these fields
}
了解更多信息
答案 1 :(得分:2)
如果由于某种原因您无法使用MOXy,另一种解决方案是将emp
元素映射为列表
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class abc {
@XmlElement(name = "emp")
private List<String> emp;
@XmlElement(name = "xyz")
private String xyz;
// added getters and setters for these fields
}
然后使用以下代码获取值:
obj.getEmp().get(0);
obj.getEmp().get(1);
您可以拥有String[]
字段,并让当前的访问者方法访问String[]
。
import javax.xml.bind.annotation.*;
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class abc {
private String[] emp = new String[2];
private String xyz;
public String getEmp1() {
return emp[0];
}
public void setEmp1(String emp1) {
this.emp[0] = emp1;
}
public String getEmp2() {
return emp[1];
}
public void setEmp2(String emp2) {
this.emp[1] = emp2;
}
public String getXyz() {
return xyz;
}
public void setXyz(String xyz) {
this.xyz = xyz;
}
}
答案 2 :(得分:0)
这可能有用。
<root>
<emp1>Google</emp1>
<emp2>Yahoo</emp2>
<xyz>random</xyz>
</root>
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class abc {
@XmlElement(name = "emp1")
private String emp1;
@XmlElement(name = "emp2")
private String emp2;
@XmlElement(name = "xyz")
private String xyz;
}