XML::Simple 是 Perl 中轻量快速的 XML 解析模块,适合简单场景;需显式设置 ForceArray、KeyAttr、KeepRoot 等选项避免隐式转换问题;生成结构含 -content 和 -前缀属性键;XMLout 可写回但不支持 CDATA、注释或校验。

Perl 解析 XML 文件,XML::Simple 是最轻量、上手最快的模块之一,适合配置文件、简单数据交换等场景;但它不推荐用于结构复杂、含命名空间、DTD 或需要严格验证的 XML。
安装与基本用法
先确保已安装 XML::Simple(通常不在 Perl 标准库中):
- 命令行安装:cpan XML::Simple 或 cpanm XML::Simple
- 脚本中引入:use XML::Simple;
- 最简解析:my $data = XMLin('config.xml'); —— 返回一个 Perl 哈希引用
常见解析模式与选项
XML::Simple 默认行为较“智能”,但容易因隐式转换导致意外。建议显式控制关键选项:
- ForceArray => 1:强制所有元素返回数组引用(避免单个子节点是哈希、多个时变数组的不一致)
- KeyAttr => []:禁用属性转哈希键(默认会把 id="123" 变成哈希 key),防止属性名冲突或丢失
- KeepRoot => 1:保留根元素名作为外层哈希 key,结构更清晰
- 示例:my $ref = XMLin($file, ForceArray => 1, KeyAttr => [], KeepRoot => 1);
理解生成的数据结构
XML::Simple 把 XML 映射为嵌套哈希/数组,但规则需留意:
- 元素内容存于 -content 键(如
→ name => { '-content' => 'Alice' })Alice - 属性存于以 - 开头的键(如
→ item => [ { '-id' => '100' } ]) - 混合内容(文本+子元素)会同时含 -content 和子键,顺序不保证,慎用
写回 XML 与注意事项
用 XMLout() 可将 Perl 数据结构转为 XML 字符串:
- print XMLout($ref, RootName => 'root', NoAttr => 1);
- NoAttr => 1 避免把哈希 key 当作属性输出(防止意外污染)
- 注意:XMLout 不保证格式美观,也不处理编码(建议手动设 XMLDecl => 1 并确保源数据是 UTF-8)
- ⚠️ 它不支持 CDATA、注释、处理指令,也不校验合法性 —— 纯粹是“数据序列化工具”
基本上就这些。XML::Simple 胜在快和小,但别指望它处理 SOAP 或 XHTML。真要健壮解析,直接上 XML::LibXML 更稳妥。







