代码之家  ›  专栏  ›  技术社区  ›  GustyWind

基于键将XML节点合并为一个节点

  •  -2
  • GustyWind  · 技术社区  · 15 年前

    我有一个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);
        }
    
    }
    
    1 回复  |  直到 12 年前
        1
  •  0
  •   Khurram    15 年前

    在将Availlist 1添加到Availlist之前,应检查是否存在重复项。您可以编写一个函数来遍历availist,获取availid并将其与您要添加的函数匹配。 通常列表中可以有多少记录。因为如果遍历听起来很昂贵,您需要考虑性能因数。