如何将MySQL表导出为表列作为标签属性的XML格式文件
MySQL导出指定属性格式XML的实现方法
MySQL原生--xml导出参数固定输出<field>子节点嵌套的结构,没有内置开关可以直接切换为列名作为<row>标签属性的格式,可通过以下两种方案实现目标输出:
- 方案1:SQL直接拼接生成目标结构(无二次处理成本)
不需要加--xml参数,直接通过SQL内置的字符串函数拼接目标XML节点,导出后直接可用,参考命令:
命令里sudo mysql -u root -p testDB -e "SELECT CONCAT('<row col1=\"', col1, '\" col2=\"', col2, '\" col3=\"', col3, '\" />') FROM testTable;" | tail -n +2 > testTable.xmltail -n +2的作用是过滤掉mysql查询结果默认输出的列名表头。如果表字段较多,可以先查询information_schema.COLUMNS表拿到对应表的所有字段名,自动生成拼接SQL,不需要手动逐列书写。如果需要标准XML格式,可以手动在文件头部添加XML声明、根节点标签即可。 - 方案2:默认格式导出后做XML格式转换
如果已经导出了默认格式的XML文件,推荐用标准XML解析库做转换,不要直接用sed/awk等文本替换工具硬改——一旦字段值包含&、"这类XML特殊字符,很容易生成非法格式的XML。以Python自带的XML库为例,转换脚本如下:
运行脚本后生成的文件完全匹配你需要的格式,同时自动处理了特殊字符转义,不会出现XML语法错误。import xml.etree.ElementTree as ET # 读取默认导出的XML文件 tree = ET.parse('testTable.xml') root = tree.getroot() result = ['<?xml version="1.0" encoding="UTF-8"?>'] for row in root.iter('row'): attrs = [] for field in row.findall('field'): col_name = field.attrib['name'] col_val = field.text if field.text is not None else '' # 转义XML特殊字符避免格式错误 col_val = col_val.replace('&', '&').replace('"', '"').replace('<', '<').replace('>', '>') attrs.append(f'{col_name}="{col_val}"') result.append(f'<row {" ".join(attrs)} />') # 写入格式化后的文件 with open('testTable_formatted.xml', 'w', encoding='utf-8') as f: f.write('\n'.join(result))
内容的提问来源于stack exchange,提问作者Muhammad Asaduzzaman
相关产品推荐
相关产品推荐

