xml - JAXB 解组多个同名节点
问题描述
如果 XML 如下所示,则尝试解组 XML 并获得相同的结果:
<resultsData>
<passed>
<testScript id="1" name="t1"/>
<testScript id="2" name="t2"/>
</passed>
<passed>
<testScript id="3" name="t3"/>
</passed>
</resultsData>
或者
<resultsData>
<passed>
<testScript id="1" name="t1"/>
<testScript id="2" name="t2"/>
<testScript id="3" name="t3"/>
</passed>
</resultsData>
目前,当我解组第一个 xml 时,其中一个传递的节点被遗漏了。如果所有 testScript 节点都放在一个通过的标记中,它会按预期工作。
目前有两个班
@XmlRootElement(name = "testScript") // watch case and if class of same name exists
// @XmlAccessorType(XmlAccessType.NONE)
public class AgentTestScript implements Serializable {
private static final long serialVersionUID = -6777979502036334475L;
// @XmlAttribute
private Integer id;
// @XmlAttribute
private String name;
public AgentTestScript() {} // required to be a legal bean
public AgentTestScript(Integer id, String name) {
this.id = id;
this.name = name;
}
@XmlAttribute
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
// @XmlElement
@XmlAttribute
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "AgentTestScript [id=" + id + ", name=" + name + "]";
}
}
和
@XmlRootElement(name = "resultsData")
//@XmlAccessorType(XmlAccessType.FIELD)
public class AgentResultsData implements Serializable{
private static final long serialVersionUID = 6871291894594957636L;
private List<AgentTestScript> failed = new ArrayList<>();
// @XmlElement(nillable = true, required = true)
private List<AgentTestScript> passed = new ArrayList<>();
private Integer numberOfScripts;
public AgentResultsData() {} // required to be a bean
@XmlElement(name = "testScript")
@XmlElementWrapper
public List<AgentTestScript> getFailed() {
return failed;
}
public void setFailed(List<AgentTestScript> failed) {
this.failed = failed;
}
@XmlElement(name = "testScript")
@XmlElementWrapper
public List<AgentTestScript> getPassed() {
System.out.println("h2");
// return null;
return passed;
}
public void setPassed(List<AgentTestScript> passed) {
System.out.println("h1");
this.passed = passed;
}
// @XmlElement(required = true, nillable = true)
public Integer getNumberOfScripts() {
return numberOfScripts;
}
public void setNumberOfScripts(Integer numberOfScripts) {
this.numberOfScripts = numberOfScripts;
}
}
我的问题是如何让两个提供的 XML 产生相同的结果?似乎这应该是可能的。
解决方案
推荐阅读
- google-cloud-platform - GCP Cloud Functions 不会在编辑视图中显示源代码
- php - 防止从 laravel 应用程序中的任何地方调用 api
- reactjs - 从flamelink添加图片时出现问题
- javascript - nodejs express 错误 TS2531:对象可能为“空”
- python - Tkinter - 如何更改默认笔记本边框颜色?
- windows - 如果超过一分钟的 Windows 批处理文件,则退出循环
- flutter - firebase 消息传递和flutter sdk 驱动程序版本解决失败
- python - 发送 ctrl+c 按键需要 0.5 秒才能运行。如何加快速度?
- mysql - 如果数据类型是 Char(1),如何处理 Mysql 中文本文件中的 null?
- android - FaceDetector 没有通过 FaceDetector.release() 释放