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

基于标签拆分XML Etree:分离含指定子节点的familierelasjon

解决XML数据格式不匹配错误:拆分Etree处理不同节点类型

问题背景

循环XML响应填充列表时,含<relatertPersonUtenFolkeregisteridentifikator>子节点的<familierelasjon>标签会导致数据格式不匹配,触发Length of values (x) does not match length of index (y)错误。解决方案是将原Etree拆分为两个独立Etree,分别处理两类节点。

实现步骤

1. 提取所有目标节点

首先从原XML中获取所有<familierelasjon>节点:

from lxml import etree

# 假设xml_content是你的XML响应内容
root = etree.fromstring(xml_content)
all_familierelasjoner = root.xpath('//familierelasjon')

2. 按子节点存在性分类

遍历节点,将其分为“含指定子节点”和“不含指定子节点”两类:

# 初始化分类列表
with_subnode = []
without_subnode = []

for rel in all_familierelasjoner:
    # 检查当前节点是否包含目标子节点
    has_target_subnode = bool(rel.xpath('./relatertPersonUtenFolkeregisteridentifikator'))
    if has_target_subnode:
        with_subnode.append(rel)
    else:
        without_subnode.append(rel)

3. 构建两个独立Etree

基于分类后的节点,创建两个新的Etree,保留原根节点的属性和标签:

# 构建含指定子节点的Etree
root_with = etree.Element(root.tag, attrib=root.attrib)
for node in with_subnode:
    root_with.append(node)
tree_with = etree.ElementTree(root_with)

# 构建不含指定子节点的Etree
root_without = etree.Element(root.tag, attrib=root.attrib)
for node in without_subnode:
    root_without.append(node)
tree_without = etree.ElementTree(root_without)

后续处理

拆分完成后,你可以针对两个Etree分别编写数据填充逻辑:

  • 对tree_without,沿用原有逻辑提取字段,避免结构差异导致的长度不匹配;
  • 对tree_with,额外处理<relatertPersonUtenFolkeregisteridentifikator>子节点下的内容,适配其数据结构。

内容的提问来源于stack exchange,提问作者Petter Corneliussen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:40:26