我目前正在尝试阅读这个XML文件(请注意,为简单起见,我简化了XML):
<Users>
<User id="1" name="NY-01" location="New York">
<Hosts>
<Host>
<Host_Name>val9</Host_Name>
</Host>
<Host>
<Host_Name>td8</Host_Name>
</Host>
</Hosts>
</User>
</Users>
我使用JAXB库来读取它。
基本上我做了一个循环:
List<DataVal> l = new ArrayList<DataVal>();
for (int i = 0; i < data.getUsers().size(); i++) {
DataVal pc = new DataVal();
pc.setUser_id(data.getUsers().get(i).getId().toString());
pc.setUser_name(data.getUsers().get(i).getName());
pc.setUser_location(data.getUsers().get(i).getLocation());
for (int j = 0; j < data.getUsers().get(i).getHosts().getHost().size(); j++) {
pc.setHost_name(data.getUsers().get(i).getHosts().getHost().get(j).getHostName());
System.out.println(pc);
l.add(pc);
}
}
请注意,当我在添加到列表之前执行System.out.println(pc)时,pc的值是正确的;
但是当我打印出ArrayList&#34; l&#34;在这段代码之后,我得到host_name td8两次而不是val9和td8作为下一个。 id,name,location values尽管是正确的。
为什么会这样?
这是打印列表的代码:
for (int q = 0; q < l.size(); q++) {
System.out.println(l.get(q)); // I have a toString implementation of this...
}
编辑:在使用eclipse进行调试之后,由于某种原因,在j循环的每次迭代之后,值都会变为host_name的最后一个循环值...
答案 0 :(得分:2)
好像你正在每次传递时替换pc.setHost_name,这意味着你的主机名值将等于主机的最后读数。
如果它们需要区分,这意味着您需要在主机循环内创建DataVal对象,而不是用户循环。