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

Python3从URL解析XML脚本异常:仅生成根元素无产品数据

解决XML解析与自定义Feed生成问题

看起来你的脚本遇到了两个核心问题:一是生成的XML Feed只有空的<SHOP />根元素,二是只有name被打印出来,后续的产品数据没有被添加到Feed里。我来帮你一步步排查和修复:

1. 先排查min_units_per_order的判断逻辑

首先,你的循环入口是判断min_units_per_order的文本是否为'1',但这里有两个潜在问题:

  • 如果min_units_per_order元素不存在,直接调用.text会抛出AttributeError,导致脚本中断
  • 文本可能带有前后空格,或者是数字类型(比如1而不是字符串'1')

修改判断逻辑,增加元素存在性检查和空格处理:

for r in root.findall('product'):
    # 先获取元素,再检查文本
    min_units_elem = r.find('min_units_per_order')
    if min_units_elem is not None and min_units_elem.text.strip() == '1':
        # 后续产品处理代码...

2. 移除异常处理中的continue语句

你的代码在description或PRICE_VAT不存在时,直接用continue跳过了整个产品的处理。这会导致只要这两个元素有一个缺失,该产品就不会被添加到Feed里,同时后续的ean、sku等打印也不会执行。

把continue去掉,只保留默认值赋值:

try:
    description = r.find('description').text or ""
except AttributeError:
    description = ""
# 移除这里的continue

try:
    price = r.find('PRICE_VAT').text or ""
except AttributeError:
    price = ""
# 移除这里的continue

3. 为ean元素增加异常处理

你直接调用r.find('barcodes/barcode').text,如果这个元素不存在,会抛出AttributeError,导致脚本中途停止,后续产品都无法处理。给它加上异常处理:

try:
    ean = r.find('barcodes/barcode').text or ""
except AttributeError:
    ean = ""
    # 如果ean是必填项,可以在这里加continue跳过该产品,否则保留空值继续
    # continue

4. 检查XML命名空间问题(关键排查点)

如果上述修改后还是生成空的Feed,很可能是XML带有命名空间,导致root.findall('product')找不到任何元素。你可以先打印root.tag看看,比如输出可能是{http://some-namespace-url}root,这说明存在命名空间。

处理命名空间的方法有两种:

方法一:显式指定命名空间

# 获取命名空间
ns = root.tag.split('}')[0].strip('{')
# 用命名空间查找product元素
for r in root.findall(f'{{{ns}}}product'):
    # 后续判断逻辑...

方法二:使用局部名称查找(忽略命名空间)

for r in root.findall('.//*[local-name()="product"]'):
    # 后续判断逻辑...

5. 验证生成的XML内容

最后,你可以在写入文件前,先打印生成的XML内容,确认是否有SHOPITEM元素:

xml_content = ET.tostring(data, encoding='utf-8', xml_declaration=True)
print(xml_content.decode('utf-8'))  # 打印XML内容调试
with open('ociofeed.xml', 'wb') as f:
    f.write(xml_content)
# 不需要手动调用f.close(),with语句会自动关闭文件

按照这些步骤修改后,应该能正常生成包含符合条件产品的XML Feed了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:57:54