You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

遍历XML提取属性到JSON时timestamp与body重复问题排查

问题原因

你代码里的内层循环用了root.iter('revision'),这会遍历整个XML文档里的所有revision节点,而非当前page节点下的子节点。每次循环时,dictionary["timestamp"]和dictionary["body"]会被不断覆盖,直到遍历完所有revision,最终所有条目都会使用最后一个revision的内容,所以每个title对应的这两个字段都相同。

解决方法

需要从当前遍历的page节点下去查找对应的revision,而非从根节点root查找。同时根据需求分两种处理方式:

方式1:每个page只取最后一个revision(最新版本)

如果每个page仅需保留最新的revision数据,直接获取当前page下的revision节点并取最后一个即可:

if __name__ == "__main__":
    path = 'local path'
    tree = ET.parse(path)
    root = tree.getroot()

    with open("C:/Users/User/Documents/Github/News-Corpus/corpus.json", "w") as f:
        for page in tqdm(root.findall('page')):
            title = page.find('title').text
            dictionary = {"title": title}
            # 从当前page下获取所有revision节点
            revisions = page.findall('revision')
            if revisions:
                # 取最后一个revision(对应最新版本)
                latest_rev = revisions[-1]
                dictionary["timestamp"] = latest_rev.find('timestamp').text
                dictionary["body"] = latest_rev.find('text').text
            f.write(json.dumps(dictionary))
            f.write("\n")

方式2:每个revision生成一条JSON条目

如果每个page下的每个revision都需要单独生成一条JSON记录,就在遍历当前page的revision时直接写入文件:

if __name__ == "__main__":
    path = 'local path'
    tree = ET.parse(path)
    root = tree.getroot()

    with open("C:/Users/User/Documents/Github/News-Corpus/corpus.json", "w") as f:
        for page in tqdm(root.findall('page')):
            title = page.find('title').text
            # 遍历当前page下的所有revision节点
            for revision in page.findall('revision'):
                dictionary = {
                    "title": title,
                    "timestamp": revision.find('timestamp').text,
                    "body": revision.find('text').text
                }
                f.write(json.dumps(dictionary))
                f.write("\n")

内容的提问来源于stack exchange,提问作者eneko valero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:11:09