xmllint 是 libxml2 提供的轻量高效命令行 XML 工具,支持格式化、DTD/XSD 校验、XPath 提取及结合 shell 实现简单编辑,无需 Python/Java 环境,多数 Linux 预装或易安装。

xmllint 是 libxml2 提供的命令行 XML 处理工具,轻量、高效,适合脚本中解析、校验、格式化或提取 XML 内容。它不依赖 Python 或 Java 环境,开箱即用(多数 Linux 发行版预装或可通过 apt install libxml2-utils / yum install libxml2 安装)。
格式化(美化)XML 输出
让压缩或混乱的 XML 变得可读:
- 基本格式化:
xmllint --format input.xml - 保存到新文件:
xmllint --format input.xml > pretty.xml - 原地格式化(需 GNU sed 配合,xmllint 本身不支持 -i):
xmllint --format input.xml > tmp && mv tmp input.xml
验证 XML 是否符合 DTD 或 XSD
检查语法和结构合法性:
- 用内置 DTD 验证(如 XHTML):
xmllint --valid --noout file.xhtml - 用外部 XSD 验证:
xmllint --schema schema.xsd data.xml --noout -
--noout表示只输出错误,不打印文档内容;省略则会先输出校验后的 XML
提取节点内容(XPath 查询)
用 --xpath 提取文本或节点,类似“XML 的 grep”:
- 提取所有 title 文本:
xmllint --xpath '//title/text()' book.xml - 提取带属性的节点:
xmllint --xpath '//*[@id="main"]/name/text()' config.xml - 提取整个节点(含标签):
xmllint --xpath '//config' config.xml(去掉/text()) - 注意:XPath 必须写完整,
//表示任意层级,.表示当前节点,@attr获取属性值
编辑与转换(配合 shell 工具)
xmllint 本身不修改文件,但可组合实现简单编辑:
- 替换某个值(如把 version=1.0 改成 2.0):
xmllint --shell input.xml (较繁琐,建议搭配xmlstar或sed正则处理简单场景) - 删除节点:
xmllint --xpath '/*[not(self::obsolete)]' input.xml(用 XPath 排除方式间接“删除”) - 生成新 XML 片段:
echo '(- 表示从 stdin 读) ' | xmllint --format -- new
实际使用中,优先用 --xpath 提取、--format 整理、--schema 校验。复杂修改建议转用 xmlstar 或编程语言,xmllint 更擅长“查”和“验”,而非“改”。










