【问题标题】:Merging XML nodes into one based on key基于键将 XML 节点合并为一个
【发布时间】:2009-04-23 07:12:50
【问题描述】:

我有一个 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);
    }

}

【问题讨论】:

  • 我在这里实际上没有看到问题?
  • 不,我只是想详细解释一下,所以粘贴代码简单地说如何将两个重复节点合并为一个

标签: java xml


【解决方案1】:

在将availList1 添加到availList 之前,您应该检查是否有重复。您可以编写一个遍历availList 的函数,获取avail_idate 并将其与您要添加的那个匹配。 列表中一般可以有多少记录。因为如果遍历听起来代价高昂,您将需要考虑性能因素。

【讨论】:

  • 是的,我有遍历列表的想法,但后来放弃了它,因为这是每周运行的计划任务意味着每周列表都会增加。
猜你喜欢
  • 2021-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 2012-08-16
相关资源
最近更新 更多