如何用xmlstarlet命令行工具编辑XML文件
发布时间 - 2026-01-05 00:00:00 点击率:次xmlstar 默认不修改原文件,需用 --inplace 或重定向;更新用 -u XPath -v 值,添加节点用 --subnode 或 --insert,删除用 --delete,批量处理需 shell 循环,注意编码、命名空间和 XPath 精确性。
用 xmlstar 修改 XML 元素内容
xmlstar 默认不修改原文件,必须显式用 --inplace 或重定向输出。想把 改成 ,最常用的是 ed(edit)子命令:
xmlstar --inplace -u "//name" -v "new" file.xml
注意:-u 是 update 的缩写,后面跟 XPath 表达式;-v 指定新值。如果匹配多个节点,全部都会被更新。XPath 中的双引号需转义或改用单引号避免 shell 解析错误。
- 路径中含空格或特殊字符?用单引号包裹 XPath:
'//user/name' - 只想改第一个匹配项?加
[1]://name[1] - 原值含换行或 HTML 实体?
xmlstar会自动转义,无需手动处理
用 xmlstar 添加新节点
添加子节点用 --subnode,添加同级节点用 --insert。比如在每个 下追加一个 :
xmlstar --inplace --subnode "//user" --type elem -n status -v active file.xml
关键参数含义:--subnode 指定父节点路径;--type elem 表示插入元素节点(不是属性);-n 是 name;-v 是 value。
- 要加属性?把
--type elem换成--type attr,且-n改为属性名,如id - 插入位置不对?
--subnode总是追加到末尾;要用--insert+--next或--first控制顺序 - 父节点不存在?命令静默失败,建议先用
sel子命令验证路径是否命中:xmlstar sel -t -v "//user" file.xml
用 xmlstar 删除节点或属性
删除用 --delete,后面直接跟 XPath。例如删掉所有 节点:
xmlstar --inplace --delete "//temp" file.xml
删属性更简单,XPath 指向属性即可,比如删掉 中的 id 属性:
xmlstar --inplace --delete "//user/@id" file.xml
注意:XPath 中属性用 @ 前缀,这是必须的,漏掉就删不掉。
- 删完文件变空?检查 XPath 是否误匹配了根节点,比如
/*会删整个文档 - 想删文本节点?用
text()函数://name/text() - 不确定删对没?先去掉
--inplace,用管道看效果:xmlstar ed --delete "//temp" file.xml | head -5
xmlstar 批量处理多个文件时的坑
xmlstar 不支持通配符批量传参,xmlstar --inplace -u "//x" -v y *.xml 会报错。正确做法是用 shell 循环:
for f in *.xml; do xmlstar --inplace -u "//version" -v "2.1" "$f"; done
另一个常见问题是编码。xmlstar 默认按 UTF-8 解析,如果文件是 GBK 或 ISO-8859-1,会报 
encoding error。此时需加 --xmlpi 和 --encoding 参数强制指定:
xmlstar --inplace --encoding GBK -u "//title" -v "中文标题" file.xml
--encoding 必须放在所有操作参数之前,否则无效。
- Windows 上路径含空格?用双引号包裹变量:
"$f" - 想跳过格式损坏的文件?加
2>/dev/null || true忽略错误,但不推荐——应先用xmllint --noout file.xml验证合法性 - 修改后 XML 缩进乱了?xmlstar 不保留原始格式,如需美化,得额外用
xmllint --format管道处理
xmlns="http://example.com/ns" 的文件,必须先用 --net 注册前缀,否则所有 XPath 都不匹配。
# html
# node
# windows
# 编码
# 工具
# win
# 常见问题
# NULL
# 命名空间
# format
# xml
# Error
# 循环
# Namespace
# delete
# http
# 的是
# 先用
# 多个
# 会报
# 重定向
# 这是
# 单引号
# 双引号
# 放在
# 都不
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Java垃圾回收器的方法和原理总结
详解Android中Activity的四大启动模式实验简述
高端网站建设与定制开发一站式解决方案 中企动力
如何快速选择适合个人网站的云服务器配置?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南
如何在阿里云高效完成企业建站全流程?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Laravel storage目录权限问题_Laravel文件写入权限设置
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
Java解压缩zip - 解压缩多个文件或文件夹实例
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何获取PHP WAP自助建站系统源码?
使用Dockerfile构建java web环境
Laravel如何处理异常和错误?(Handler示例)
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel如何实现API版本控制_Laravel版本化API设计方案
大同网页,大同瑞慈医院官网?
如何在阿里云通过域名搭建网站?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Python高阶函数应用_函数作为参数说明【指导】
如何获取上海专业网站定制建站电话?
黑客如何利用漏洞与弱口令入侵网站服务器?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
移动端脚本框架Hammer.js
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
Laravel用户密码怎么加密_Laravel Hash门面使用教程
香港服务器WordPress建站指南:SEO优化与高效部署策略
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何基于云服务器快速搭建个人网站?
如何快速生成ASP一键建站模板并优化安全性?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
EditPlus中的正则表达式 实战(4)
浅谈redis在项目中的应用

