如何用Python从XML中提取Items标签元素为可迭代列表
提取XML中嵌套CDATA的元素为可迭代列表
需求
从给定的嵌套CDATA的XML结构中,提取<items>标签下的所有<item>元素,整理为包含名称、价值、iva_tax的可迭代列表,示例输出如下:
- 条目1:Bicycle,价值$250,iva_tax: 50.30
- 条目2:Skateboard,价值$120,iva_tax: 25.0
完整实现代码
基于你已有的xml.etree.ElementTree代码片段,补充提取逻辑如下:
import xml.etree.ElementTree as ET # 假设stringBase64是解码后的XML字符串(你原代码中已处理) xml = ET.fromstring(stringBase64) # 提取CDATA中的XML文本 ite = xml.find('.//detalle').text # 解析CDATA内的XML tixml = ET.fromstring(ite) # 提取<items>下的所有<item>节点并整理为可迭代列表 items_list = [] # 定位<items>节点,遍历所有子<item> for item in tixml.find('.//items').findall('item'): # 提取各字段内容 nombre = item.find('nombre').text valor = f"${item.find('valor').text}" iva_tax = item.find('.//tax[@name="iva"]').get('value') # 结构化存储到字典 items_list.append({ 'nombre': nombre, 'valor': valor, 'iva_tax': iva_tax }) # 验证可迭代性(遍历输出) for idx, item in enumerate(items_list, 1): print(f"条目{idx}:{item['nombre']},价值{item['valor']},iva_tax: {item['iva_tax']}")
代码说明
- 定位嵌套节点:通过
find('.//items')定位CDATA内的<items>节点,再用findall('item')获取所有子项,得到原生可迭代的节点集合。 - 字段提取逻辑:
- 商品名称:直接读取
<nombre>标签的文本内容 - 商品价值:提取
<valor>文本后添加$符号格式化 - iva税值:用XPath筛选
name="iva"的<tax>节点,获取其value属性值
- 商品名称:直接读取
- 结构化存储:将每个item的字段存入字典,最终形成可迭代的列表
items_list,支持遍历、索引、切片等常规列表操作。
运行输出
条目1:Bicycle,价值$250,iva_tax: 50.30 条目2:Skateboard,价值$120,iva_tax: 25.0 条目3:Motorcycle,价值$900,iva_tax: 120.50
内容的提问来源于stack exchange,提问作者Fernando Palomeque
相关产品推荐
相关产品推荐

