xmlstar 是轻量高效的命令行 XML 处理工具,支持 XPath 查询、节点编辑、格式化及命名空间处理;纯 C 实现,无需外部依赖,适用于脚本集成与自动化。
xmlstar 是一个轻量、强大、类 Unix 风格的命令行 XML 处理工具,支持 XPath 查询、节点增删改查、格式化、转换(如转 CSV/JSON)、命名空间处理等。它不依赖外部 XML 库(纯 C 实现),速度快,适合脚本集成。
最常用场景:从 XML 中提取值或判断结构是否存在。
xmlstar sel -t -v "//book/title" books.xml
xmlstar sel -t -v "//book[@isbn='978-0-399-15394-8']/author" books.xml
xmlstar sel -t -c "//config/enabled" config.xml >/dev/null && echo "enabled" || echo "disabled"
xmlstar sel -t -m "//book" -v "title" -o " — " -v "author" -n books.xml
ed 支持增、删、改节点,语法简洁,但注意:它默认输

xmlstar ed -u "//book[1]/@isbn" -v "978-1-234-56789-0" books.xml > new.xml
xmlstar ed -u "//title" -x "concat(substring-before(.,'Old'), 'New', substring-after(.,'Old'))" books.xml
xmlstar ed -s "//book[1]" -t elem -n tag -v fiction books.xml
xmlstar ed -d "//price" books.xml
遇到 xmlns 或前缀(如 ),必须先声明命名空间,再在 XPath 中使用前缀。
xmlstar --net -N dc="http://purl.org/dc/elements/1.1/" sel -t -v "//dc:creator" feed.xml
-N prefix="URI"
xmlns="http://example.com/ns"),需显式绑定前缀(如 -N x="http://example.com/ns"),然后用 //x:element
-P 自动美化输出(带缩进):xmlstar sel -t -c "//book" -P books.xml
curl -s https://api.example.com/data.xml | xmlstar sel -t -v "//item/name"
for f in *.xml; do xmlstar ed -u "//version" -v "2.1" "$f" > "new_$f"; done
基本上就这些。xmlstar 不复杂但容易忽略命名空间和引号细节,多练几次 XPath 表达式,就能高效替代 GUI 工具或写 Python 脚本做 XML 自动化了。