phpMyAdmin XML导入报错因仅支持其自导出格式,需严格匹配标签结构(如<phpmyadmin_xml_export>)、无注释/命名空间、<value>包裹字段值且空值为<value />、UTF-8无BOM、无多余空白。
phpMyAdmin 导入 XML 时为什么报错 XML error: Not well-formed (invalid token)
因为 phpmyadmin 的 xml 导入器只认它自己导出的格式,不是任意合法 xml 都能导入。它不走标准 dom/sax 解析,而是用正则 + 简单字符串扫描硬匹配字段结构。
- 必须是 phpMyAdmin 自己导出的
.xml文件(含<table>、<field>、<row>等固定标签) - 不能有 XML 声明以外的注释、处理指令、CDATA 段或命名空间(比如
<root xmlns="http://..."></root>直接失败) - 字段值必须用
<value>包裹,且不能嵌套标签;空值写成<value />,不是<value></value> - 导出时若勾选了
Export type: Quick,会省略部分元数据,但导入时反而更稳——Custom模式加的额外属性(如type="int")可能触发解析跳过
用 PHP 手动解析导出的 phpMyAdmin XML 文件要避开哪些坑
别直接用 simplexml_load_string() 或 DOMDocument::loadXML() 读取后往数据库塞——字段类型、NULL 处理、转义字符全得自己对齐导出逻辑。
- 日期/时间字段在 XML 里是带引号的字符串(如
<value>"2024-03-15 14:22:03"</value>),多一层引号,json_decode()会失败,得先trim($val, '"') -
<value>内容可能含 HTML 实体(、<code>'),但 phpMyAdmin 导出时**不自动反转义**,入库前得调html_entity_decode($val, ENT_QUOTES, 'UTF-8') - 自增主键字段如果导出时值为
0或空,导入时会被忽略;但手动解析时若原样插入,可能触发重复主键错误——得检测<field name="id" null="1"/>这类标记来决定是否跳过该字段 - 大文件(>2MB)用
XMLReader流式读取,别用SimpleXML全载入内存,否则 OOM
想把其他系统 XML 数据喂给 phpMyAdmin,最省事的中间方案
别改 phpMyAdmin 源码,也别写完整转换器。用它导出一个空表结构 XML 作模板,再用脚本把你的数据填进去,严格对齐它的标签层级和属性规则。
- 模板关键结构:根节点必须是
<phpmyadmin_xml_export>,内层是<database name="xxx"><table name="yyy">...</table></database> - 每行数据包在
<row>...</row>里,每个字段用<field name="col1"><value>xxx</value></field>,null 字段写成<field name="col1" null="1"/> - 字符编码必须是 UTF-8 且无 BOM;文件末尾不能有多余空白或换行,否则 phpMyAdmin 解析器会卡在 EOF 判断上
- 用
xmlstar命令行工具快速验证:xmlstar --validate your_file.xml只能保证格式合法,还得用head -n 20 your_file.xml看开头是否匹配模板结构
导出时选 XML 格式却得不到可读结构?检查这三项配置
phpMyAdmin 默认导出的 XML 不带 DTD 和 schema,看着像“没结构”,其实是故意精简——它只要求解析器能定位 <row> 和 <value>,别的都当噪音丢弃。
- 导出页面勾选
Complete insert statements无效——XML 格式下这个选项被忽略,只有 SQL 格式才生效 - 若数据库有视图或临时表,XML 导出默认跳过,不会报错也不会提示;得进
Export→Format-specific options展开,手动勾选Export views - 中文字段名导出后变成
field name="名字"这种实体编码,但导入时能正确还原;不过如果你后续要用 XSLT 处理,得提前在phpMyAdmin/config.inc.php加$cfg['Export']['xml']['charset'] = 'utf-8';



















