2009-04-23 5 views
-2

J'ai un fichier XML qui contient plusieurs noeuds ayant des enfants. Si les nœuds ont les mêmes clés, leurs enfants doivent être fusionnés en un seul nœud.Fusion de noeuds XML en un en fonction de la clé

<availexport> 
    <date>090423121513</date> 
    <employee emp_cd="9120004"> 
    <day date="20050406" start="10" end="20"/> 
    <day date="20050406" start="21" end="23"/> 
    <day date="20050511" start="12" end="23"/> 
    </employee> 
    <records>3</records> 
</availexport> 

Deux enregistrements ont les mêmes dates. Comment puis-je les fusionner en un seul? J'ai une liste de ceux-ci en tant que paires clé/valeur.

for (int k = this.employeesList.size(); k > 0; k--) { 
    Map empInfo1 = new HashMap(); 
    Map empInfo = (Map) this.employeesList.remove(0); 
    this.empID = (Long) empInfo.get(EMP_ID); 
    this.hrID = (String) empInfo.get(HR_EMP_ID); 
    this.avail_iDate = (Long) empInfo.get(AVAIL_IDATE); 
    this.start_ITime = (Long) empInfo.get(START_ITIME); 
    this.end_ITime = (Long) empInfo.get(END_ITIME); 
    List availList = new ArrayList(); 
    Map availList1 = new HashMap(); 
    if (empAvailRecord.containsKey(empID)) { 
     empInfo1 = (Map) empAvailRecord.get(empID); 
     availList = (List) empInfo1.get("DAY"); 
     availList1.put(AVAIL_IDATE, avail_iDate); 
     availList1.put(START_ITIME, start_ITime); 
     availList1.put(END_ITIME, end_ITime); 
     availList.add(availList1); 
    } else { 

     availList1.put(AVAIL_IDATE, avail_iDate); 
     availList1.put(START_ITIME, start_ITime); 
     availList1.put(END_ITIME, end_ITime); 
     availList.add(availList1); 

     empInfo1.put("HR_ID", hrID); 
     empInfo1.put("DAY", availList); 
     empAvailRecord.put(empID, empInfo1); 
    } 

} 
+0

Je ne vois pas de question ici? – AnthonyWJones

+0

Non, je voulais l'expliquer en détail donc collé le code En simple comment fusionner deux nœuds en un – GustyWind

Répondre

0

Vous devez vérifier les répétitions avant d'ajouter availList1 à availList. Vous pouvez écrire une fonction qui traverse availList, obtient avail_idate et l'associe à celle que vous êtes sur le point d'ajouter. Combien d'enregistrements peuvent être présents dans la liste en général. Parce que vous aurez besoin de considérer les facteurs de performance si la traversée semble coûteuse.

+0

Ouais j'ai eu l'idée de parcourir la liste, mais plus tard, il a chuté parce que c'est la tâche de calendrier s'exécute chaque semaine signifie chaque semaine la liste est augmentée. – GustyWind

Questions connexes