【发布时间】:2021-03-09 22:58:40
【问题描述】:
我正在尝试使用 python 解析一个 xml 文件,它在 s_amount 行上返回一个AttributeError 'NoneType' object has no attribute 'text'。 xml 文件包含 n 个产品的产品 ID、数量、数量和价格信息(示例文件中为三个),理想情况下,我希望生成一个表,其中每个产品 ID 一行,并在可用的情况下填写相关列(数量、数量和价格信息)。产品 5340958 会有多行,因为它有多个数量。
xml文件提取:
<?xml version="1.0" encoding="UTF-8"?>
<pricebooks xmlns="http:...">
<pricebook>
<header pricebook-id="IT21">
<currency>EUR</currency>
</header>
<price-tables>
<price-table product-id="16780001">
<amount quantity="1">15.00</amount>
<price-info>2021</price-info>
</price-table>
<price-table product-id="5340958">
<amount quantity="1">5</amount>
<amount quantity="2">5</amount>
<amount quantity="3">50</amount>
</price-table>
<price-table product-id="864564543">
<amount quantity="1">60</amount>
</price-table>
</price-tables>
</pricebook>
</pricebooks>
当前python脚本:
import pandas as pd
import xml.etree.ElementTree as et
xtree = et.parse("C:...ITfile.xml")
xroot = xtree.getroot()
df_cols = ["product-id", "quantity", "amount", "price-info"]
rows = []
for pricebook in xroot:
for element in pricebook[1:]:
for pricetable in element:
s_product_id = pricetable.attrib.get("product-id")
rows.append({"product-id": s_product_id})
for item in pricetable:
s_quantity = item.attrib.get("quantity")
rows.append({"quantity": s_quantity})
s_amount = item.find("amount").text
rows.append({"amount": s_amount})
out_df = pd.DataFrame(rows, columns = df_cols)
【问题讨论】:
-
也许应该是
s_amount = item.text?你必须检查item是否引用<amount>标签。
标签: python xml dataframe xml-parsing elementtree