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

使用xml.etree.ElementTree生成XML时DAILY_PRICE元素位置错误问题

问题:Python ElementTree生成XML时子元素嵌套错误

我用Python的xml.etree.ElementTree生成XML,遇到子元素出现在非预期标签下的问题。相关代码片段如下:

product_price_details = ET.SubElement(product, "PRODUCT_PRICE_DETAILS")

product_price_details_start_datetime = ET.SubElement(product_price_details, "DATETIME", attrib={"type":"valid_start_date"})

price_start_date = ET.SubElement(product_price_details_start_datetime, "DATE")
price_start_date.text = product_detail["valid_start_date"]

product_price_details_end_datetime = ET.SubElement(product_price_details, "DATETIME", attrib={"type":"valid_end_date"})

price_end_date = ET.SubElement(product_price_details_end_datetime, "DATE")
price_end_date.text = product_detail["valid_end_date"]

if product_detail["daily_price"] == "TRUE":
    daily_price = ET.SubElement(product_price_details, "DAILY_PRICE")
    daily_price.text = "true"

运行后,DAILY_PRICE元素未按预期放在PRODUCT_PRICE_DETAILS下,反而嵌套进了type="valid_end_date"的DATETIME元素内,错误XML结构如下:

<PRODUCT_PRICE_DETAILS>
  <DATETIME type="valid_start_date">
    <DATE>2024-08-14</DATE>
  </DATETIME>
  <DATETIME type="valid_end_date">
    <DATE>2024-09-30</DATE>
    <DAILY_PRICE>TRUE</DAILY_PRICE>
  </DATETIME>
</PRODUCT_PRICE_DETAILS>

请问如何确保DAILY_PRICE正确放置在PRODUCT_PRICE_DETAILS标签下?


解决方法

从代码逻辑看,你已经正确指定了DAILY_PRICE的父元素是product_price_details,出现错误的核心原因是代码缩进问题——你大概率把if代码块错误缩进了,导致它嵌套在了price_end_date的创建逻辑里,实际变成以product_price_details_end_datetime为父元素。

只需检查并修正缩进,确保if代码块和前面的product_price_details_end_datetime、price_end_date代码处于同一缩进层级,就能让ET.SubElement(product_price_details, "DAILY_PRICE")正确将DAILY_PRICE作为PRODUCT_PRICE_DETAILS的子元素。

修正后的代码示例:

product_price_details = ET.SubElement(product, "PRODUCT_PRICE_DETAILS")

product_price_details_start_datetime = ET.SubElement(product_price_details, "DATETIME", attrib={"type":"valid_start_date"})
price_start_date = ET.SubElement(product_price_details_start_datetime, "DATE")
price_start_date.text = product_detail["valid_start_date"]

product_price_details_end_datetime = ET.SubElement(product_price_details, "DATETIME", attrib={"type":"valid_end_date"})
price_end_date = ET.SubElement(product_price_details_end_datetime, "DATE")
price_end_date.text = product_detail["valid_end_date"]

# 确保此处if块与上方代码缩进一致
if product_detail["daily_price"] == "TRUE":
    daily_price = ET.SubElement(product_price_details, "DAILY_PRICE")
    daily_price.text = "true"

修正后生成的XML结构会符合预期:

<PRODUCT_PRICE_DETAILS>
  <DATETIME type="valid_start_date">
    <DATE>2024-08-14</DATE>
  </DATETIME>
  <DATETIME type="valid_end_date">
    <DATE>2024-09-30</DATE>
  </DATETIME>
  <DAILY_PRICE>true</DAILY_PRICE>
</PRODUCT_PRICE_DETAILS>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:47:30