java计算xml中的值
我有一个XML文件
<?xml version="1.0"?>
<ticket>
<team>A</team>
<imp>I1</imp>
</ticket>
<ticket>
<team>A</team>
<imp>I2</imp>
</ticket>
<ticket>
<team>b</team>
<imp>I2</imp>
</ticket>
<ticket>
<team>A</team>
<imp>I1</imp>
</ticket>
<ticket>
<team>B</team>
<imp>I2</imp>
</ticket>
<ticket>
<team>c</team>
<imp>I1</imp>
</ticket>
表示喜欢:-
Team I1 I2 I3
A 2 1 0
B 1 1 0
C 1 0 0
目前,I3在XML中并不存在。是否可以将I1、I2和I3放入散列中,检查I1是否存在,然后将计数分配给团队并显示如上所示
票。爪哇
package com.asn.ticket;
public class ticket {
private String team;
private String imp;
public ticket(String team, String imp) {
super();
this.team = team;
this.imp = imp;
}
public String getteam() {
return team;
}
public void setteam(String team) {
this.team = team;
}
public String getimp() {
return imp;
}
public void setimp(String imp) {
this.imp = imp;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((team == null) ? 0 : team.hashCode());
result = prime * result + ((imp == null) ? 0 : imp.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ticket other = (ticket) obj;
if (team == null) {
if (other.team != null)
return false;
} else if (!team.equals(other.team))
return false;
if (imp == null) {
if (other.imp != null)
return false;
} else if (!imp.equals(other.imp))
return false;
return true;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("ticket [team=");
builder.append(team);
builder.append(", imp=");
builder.append(imp);
builder.append("]");
return builder.toString();
}
}
票数。爪哇
package com.asn.team;
import com.asn.team.ticket;
public class ticketsCount {
public static void main(String[] args) {
List<ticket> ticketList = new ArrayList<ticket>();
try {
String Path = "C:\\Users";
File fXmlFile = new File(Path+"\\tickets.xml");
// File fXmlFile = new File(App.class.getClassLoader().getResource("C:\\Users\// \\tickets.xml").getFile());
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList ticketNodeList = doc.getElementsByTagName("ticket");
for (int temp = 0; temp < ticketNodeList.getLength(); temp++) {
Node varNode = ticketNodeList.item(temp);
if (varNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) varNode;
NodeList teamList = eElement.getElementsByTagName("team");
NodeList varsionList = eElement.getElementsByTagName("imp");
Node teamNode = teamList.item(0);
Node impNode = varsionList.item(0);
if(teamNode.getNodeType() == Node.ELEMENT_NODE && impNode.getNodeType() == Node.ELEMENT_NODE){
Element teamElement = (Element)teamNode;
Element impElement = (Element)impNode;
ticket ticket = new ticket(teamElement.getTextContent(), impElement.getTextContent());
ticketList.add(ticket);
}
}
}
}catch (Exception e) {
e.printStackTrace();
}
Map<ticket,Integer> count = new HashMap<ticket, Integer>();
for(ticket c: ticketList)
if(!count.containsKey(c))
count.put(c, Collections.frequency(ticketList, c));
List<String> imps = getimps(count);
List<String> teams = getteams(count);
StringBuilder heading = new StringBuilder("ticket \t| ");
for(String s : imps){
heading.append(s);
heading.append("\t| ");
}
System.out.println(heading);
System.out.println("---------------------------------");
for(String m : teams){
System.out.println(m+"\t| "+getNumOfteams(m, imps, count));
}
}
/**
* @param count
* @return
*/
private static List<String> getteams(Map<ticket, Integer> count) {
List<String> teams = new ArrayList<String>();
for(Map.Entry<ticket, Integer> ent : count.entrySet())
if(!teams.contains(ent.getKey().getteam()))
teams.add(ent.getKey().getteam());
return teams;
}
private static String getNumOfteams(String team, List<String> imps, Map<ticket, Integer> count) {
StringBuilder builder = new StringBuilder();
for(String v : imps){
for(Map.Entry<ticket, Integer> ent : count.entrySet())
if(team.equals(ent.getKey().getteam()) && ent.getKey().getimp().equals(v)){
int cnt = ent.getValue();
builder.append((cnt==0)?" ": cnt);
builder.append("\t| ");
}
}
return builder.toString();
}
private static List<String> getimps(Map<ticket, Integer> count) {
List<String> imps = new ArrayList<String>();
for(Map.Entry<ticket, Integer> ent : count.entrySet())
if(!imps.contains(ent.getKey().getimp()))
imps.add(ent.getKey().getimp());
return imps;
}
}
# 1 楼答案
我还没有执行您的代码,但如果我理解正确,它可以正常工作,只是您没有I3的任何列,因为XML文件中没有票证将I3作为其imp。因此,您只需像文件中有I3一样:
在getNumOfTeams()方法中,您不应该假设至少有一个票证具有当前imp。因此,我将其重写为:
旁注:你应该真正学习并应用命名约定。不要滥用缩写。将getter和setter命名为getTeam()和setTeam(),而不是getTeam()和setTeam(),类以大写字母开头