使用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
相关产品推荐
相关产品推荐

