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

Python解析XML嵌套标签转DataFrame报AttributeError问题求助

错误原因

  • XML节点是层级嵌套结构,不能直接在Item节点下查找深层子节点,原代码查找路径错误导致返回None,触发属性错误:
    • Description节点在Descriptions子节点下,不是Item的直接子节点
    • ExtendedProductInformation节点在ExtendedInformation子节点下
    • PackageUOM/QuantityofEaches在Packages -> Package子节点下
    • Length/Width/Height在Package -> Dimensions子节点下
    • Weight在Package -> Weights子节点下
    • 数字资产相关字段均在DigitalAssets -> DigitalFileInformation子节点下
  • 你提供的XML示例末尾闭合标签是小写的</items>,和开头的<Items>大小写不匹配,需要改成一致的<Items>否则会触发解析错误
  • 原代码中store_items的字段顺序和cols定义的顺序不一致,会导致最终DataFrame列数据错位

修正后代码

import xml.etree.ElementTree as ETree
import pandas as pd

xmldata = "0H-2021-09-15-Pies.xml"

prstree = ETree.parse(xmldata)
root = prstree.getroot()

all_items = []

cols = ["ItemLevelGTIN", "PartNumber", "BrandAAIAID", "PartTerminologyID", "Description","ExtendedProductInformation", \
        "PackageUOM", "QuantityofEaches", "Length", "Width", "Height", "Weight", "FileName", "AssetType", "FileSize", \
        "AssetHeight", "AssetWidth", "FileDateModified", "URI"]

for item in root.iter('Item'):
    # 提取Item下直接子节点
    ItemLevelGTIN = item.find("ItemLevelGTIN").text if item.find("ItemLevelGTIN") is not None else None
    PartNumber = item.find("PartNumber").text if item.find("PartNumber") is not None else None
    BrandAAIAID = item.find("BrandAAIAID").text if item.find("BrandAAIAID") is not None else None
    PartTerminologyID = item.find("PartTerminologyID").text if item.find("PartTerminologyID") is not None else None
    
    # 提取描述信息
    desc_node = item.find("Descriptions/Description")
    Description = desc_node.text.strip() if desc_node is not None else None
    
    # 提取扩展信息
    ext_prod_node = item.find("ExtendedInformation/ExtendedProductInformation")
    ExtendedProductInformation = ext_prod_node.text if ext_prod_node is not None else None
    
    # 提取包裹基础信息
    package_node = item.find("Packages/Package")
    PackageUOM = package_node.find("PackageUOM").text if package_node and package_node.find("PackageUOM") is not None else None
    QuantityofEaches = package_node.find("QuantityofEaches").text if package_node and package_node.find("QuantityofEaches") is not None else None
    
    # 提取包裹尺寸
    dim_node = package_node.find("Dimensions") if package_node is not None else None
    Length = dim_node.find("Length").text if dim_node and dim_node.find("Length") is not None else None
    Width = dim_node.find("Width").text if dim_node and dim_node.find("Width") is not None else None
    Height = dim_node.find("Height").text if dim_node and dim_node.find("Height") is not None else None
    
    # 提取包裹重量
    weight_node = package_node.find("Weights/Weight") if package_node is not None else None
    Weight = weight_node.text if weight_node is not None else None
    
    # 提取数字资产基础信息
    digital_node = item.find("DigitalAssets/DigitalFileInformation")
    FileName = digital_node.find("FileName").text if digital_node and digital_node.find("FileName") is not None else None
    AssetType = digital_node.find("AssetType").text if digital_node and digital_node.find("AssetType") is not None else None
    FileSize = digital_node.find("FileSize").text if digital_node and digital_node.find("FileSize") is not None else None
    
    # 提取数字资产尺寸
    asset_dim_node = digital_node.find("AssetDimensions") if digital_node is not None else None
    AssetHeight = asset_dim_node.find("AssetHeight").text if asset_dim_node and asset_dim_node.find("AssetHeight") is not None else None
    AssetWidth = asset_dim_node.find("AssetWidth").text if asset_dim_node and asset_dim_node.find("AssetWidth") is not None else None
    
    # 提取数字资产其他信息
    FileDateModified = digital_node.find("FileDateModified").text if digital_node and digital_node.find("FileDateModified") is not None else None
    URI = digital_node.find("URI").text if digital_node and digital_node.find("URI") is not None else None
    
    # 按cols定义的顺序组装数据
    store_items = [ItemLevelGTIN, PartNumber, BrandAAIAID, PartTerminologyID, Description, ExtendedProductInformation,
                  PackageUOM, QuantityofEaches, Length, Width, Height, Weight, FileName, AssetType,
                  FileSize, AssetHeight, AssetWidth, FileDateModified, URI]
    all_items.append(store_items)

xmlToDf = pd.DataFrame(all_items, columns=cols)
print(xmlToDf.to_string(index=True))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:42:00