将 XML 中没有标签的 API 响应转换为 Pandas 数据框

Converting API response in XML without tags to Pandas Dataframe

我是 XML 解析的新手,我需要帮助将 XML API 响应转换为 pandas 数据帧。

这是 XML 响应:

<?xml version="1.0" encoding="UTF-8"?>
<response success="true">
  <output><![CDATA[Account Name,Account Code,Level Name,"Item","Customer",Wk1Y23,Wk2Y23
"SVF - Customer Shipping Default","SVF_Shipping_Default.SVF_CSD","Los Fresnos","1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201","Lowes # 90 ~ LW00090",0.0,2.0
"SVF - Customer Shipping Default","SVF_Shipping_Default.SVF_CSD","Los Fresnos","1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201","Lowes # 63 ~ LW00063",0.0,2.0
"SVF - Customer Shipping Default","SVF_Shipping_Default.SVF_CSD","Los Fresnos","1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201","Lowes # 271 ~ LW00271",0.0,4.0]]></output>
</response>

如您所见,此 XML 中没有很多标记。我尝试使用 xml.etree.ElementTree 将 xml 解析为数据帧,但我没有向数据帧获取任何数据:

etree = ET.parse(xml_data)
df = pd.DataFrame(list(iter_docs(etree.getroot())))
print(df)

最好的方法是什么?

考虑解析 <output> 节点的文本并使用 StringIO:

将内容传递到 read_csv 调用
from io import StringIO
import xml.etree.ElementTree as ET
import pandas as pd
...

output_text = ET.parse(xml_data).find("output").text

with StringIO(output_text) as csv_data:
    df = pd.read_csv(csv_data)

print(df)
                      Account Name                  Account Code   Level Name  \
0  SVF - Customer Shipping Default  SVF_Shipping_Default.SVF_CSD  Los Fresnos   
1  SVF - Customer Shipping Default  SVF_Shipping_Default.SVF_CSD  Los Fresnos   
2  SVF - Customer Shipping Default  SVF_Shipping_Default.SVF_CSD  Los Fresnos   

                                          Item               Customer  Wk1Y23  \
0  1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201   Lowes # 90 ~ LW00090     0.0   
1  1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201   Lowes # 63 ~ LW00063     0.0   
2  1.5 G PANSY Matrix Pltr Clear Mix ~ LW85201  Lowes # 271 ~ LW00271     0.0   

   Wk2Y23  
0     2.0  
1     2.0  
2     4.0