2009-04-23 2 views
-2

У меня есть XML-файл, содержащий несколько узлов с дочерними элементами. Если узлы имеют одинаковые ключи, их дети должны быть объединены в один узел.Объединение узлов XML в один на основе ключа

<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> 

Две записи здесь имеют одинаковые даты. Как я могу объединить их в один? У меня есть список из них как пары ключ/значение.

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

На самом деле, я не вижу здесь вопроса? – AnthonyWJones

+0

Нет, я хотел разобраться с этим подробно, так что вставил код Проще, как объединить два дублирующих узла в один – GustyWind

ответ

0

Вы должны проверить наличие повторений, прежде чем добавлять availList1 в availList. Вы можете написать функцию, которая пересекает availList, получает avail_idate и сопоставляет ее с тем, который вы собираетесь добавить. Сколько записей может быть в списке вообще. Потому что вам нужно будет учитывать коэффициенты торможения, если трассировка звучит дорого.

+0

Да, у меня была идея переброски списка, но позже она была отброшена, потому что это задача расписания запускается каждую неделю, список увеличивается. – GustyWind

Смежные вопросы