libxml2是C语言中最成熟、最常用的XML解析库,支持DOM和SAX两种方式,轻量稳定跨平台,被GNOME等大量开源项目采用。
libxml2 是 C 语言中最成熟、最常用的 XML 解析库,支持 DOM(树状结构)和 SAX(事件驱动)两种解析方式。它轻量、稳定、跨平台,被 GNOME、GTK、GIMP 等大量开源项目采用。下面以实用为导向,分步骤讲清楚怎么用 C + libxml2 解析 XML 文件。
在 Ubuntu/Debian 上:
sudo apt install libxml2-dev
在 macOS 上(使用 Homebrew):
brew install libxml2
编译时需链接 -lxml2,例如
:
gcc parse.c -o parse `xml2-config --cflags --libs`
注意:不要手动写 -I/usr/include/libxml2 和 -L/usr/lib,用 xml2-config 更可靠,它会自动给出正确的头文件路径和链接参数。
DOM 方式把整个 XML 加载进内存,生成一棵树,适合中小 XML 文件(几 MB 内)。核心流程是:初始化 → 读取文档 → 定位根节点 → 遍历子节点 → 清理。
示例 XML(test.xml):
Stanley
对应 C 代码关键片段:
如果 XML 结构复杂,手动递归遍历容易出错。libxml2 内置 XPath 支持,能像 CSS 选择器一样精准取值。
常见 XPath 表达式://book[@id='1']/author(带属性过滤)、/bookstore/book[1]/title(按位置取)。
libxml2 默认按 UTF-8 处理,若 XML 声明为 ,需提前设置:
xmlSetGenericErrorFunc(NULL, my_error_handler); // 自定义错误回调
xmlInitParser(); // 必须调用
实际开发中建议:
不复杂但容易忽略:中文路径或含空格的文件名要用 xmlStrcat() 拼接,或先转成 UTF-8 编码再传给 xmlReadFile()。