Pandas调用read_csv读取CSV后用to_xml转XML时报Invalid tag name错误
XML标签名合法性说明
包含空格的标签名确实属于无效XML标签,根据XML 1.0官方规范,合法的XML标签名需满足以下要求:
- 仅可包含字母、数字、下划线、连字符(
-)、点号(.)、冒号(:) - 不可包含任何空白字符(空格、制表符、换行符等)
- 必须以字母、下划线或冒号开头,不可使用数字、连字符作为首字符
你遇到的ValueError: Invalid tag name 'foo bar'报错,就是lxml库校验到待生成的XML标签包含空格,直接拦截了非法格式的生成。
报错原因排查
你的代码中已经指定的root_name、row_name、elem_cols等参数取值都不含空格,出现报错大概率是以下两个原因:
- 你设置了
index=True,如果你的DataFrame索引的名称带空格,导出XML时会把索引作为每个- 的子节点,以索引名作为标签,就会触发合法性校验报错
- 你读取的CSV实际列名和你指定的
elem_cols参数取值不匹配,列名被解析出了带空格的内容,你可以先执行print(csv_data.columns.tolist())确认实际读取的列名是否正确
修复方案
方案1:不需要导出索引的场景
直接把index参数改为False即可,修改后的to_xml调用代码如下:
csv_data.to_xml(path_or_buffer=output_file, index = False, root_name='products',row_name='item', elem_cols=['post_title','regular_price'], prefix = 'g:', pretty_print=True)
方案2:需要保留索引的场景
在调用to_xml前先把索引重命名为不含空格的合法名称:
# 示例将索引名改为id,可根据需求替换为其他合法名称 csv_data = csv_data.rename_axis('id') csv_data.to_xml(path_or_buffer=output_file, index = True, root_name='products',row_name='item', elem_cols=['post_title','regular_price'], prefix = 'g:', pretty_print=True)
内容的提问来源于stack exchange,提问作者Sorcecoder
相关产品推荐
相关产品推荐

