xmlstarlet是Linux下处理XML的命令行工具,支持查询、编辑、格式化和验证。使用sel查询节点内容,fo格式化XML,ed修改增删节点,val验证合法性,配合-N处理命名空间,适用于Shell脚本高效操作XML数据。

Linux下处理XML文件,xmlstarlet 是一个强大且常用的命令行工具。它能查询、编辑、验证和格式化XML文档,无需编写脚本即可完成大多数操作。以下是xmlstarlet的常用命令和使用方法。
安装 xmlstarlet
在主流Linux发行版中可通过包管理器安装:- Ubuntu/Debian: sudo apt install xmlstarlet
- CentOS/RHEL: sudo yum install xmlstarlet 或 sudo dnf install xmlstarlet
- Fedora: sudo dnf install xmlstarlet
查看XML内容(查询节点)
使用 sel(select)子命令提取指定节点内容。- xmlstarlet sel -t -v "//title" file.xml:获取所有 title 节点的文本值
- xmlstarlet sel -t -m "//book" -v "title" -n file.xml:遍历每个 book 节点,输出其 title 并换行
- xmlstarlet sel -t -v "/root/item/@id" file.xml:获取属性值(@ 表示属性)
格式化和美化XML
如果XML是压缩成一行的,可用 fo(format)子命令美化排版。- xmlstarlet fo file.xml:标准格式化输出
- xmlstarlet fo -s 2 file.xml:设置缩进为2个空格
- xmlstarlet fo --indent-tab file.xml:使用Tab缩进
修改XML内容(增删改)
使用 ed(edit)子命令修改文件。- xmlstarlet ed -u "//title" -v "新标题" file.xml:更新所有 title 节点的值
- xmlstarlet ed -u "//book[@id='101']/price" -v "29.99" file.xml:根据条件更新特定节点
- xmlstarlet ed -d "//book[@category='old']" file.xml:删除符合条件的节点
- xmlstarlet ed -s "/root" -t elem -n "newitem" -v "value" file.xml:在 root 下添加新元素
- xmlstarlet ed -s "//book" -t attr -n "updated" -v "true" file.xml:添加新属性
验证XML是否合法
使用 val(validate)检查XML语法。- xmlstarlet val file.xml:验证文件是否为良好格式(well-formed)
- xmlstarlet val -e file.xml:启用严格错误提示
命名空间处理
当XML包含命名空间时,需先定义前缀。- xmlstarlet sel -N x="http://example.com/ns" -t -v "//x:title" file.xml:通过 -N 指定命名空间映射










