0

0

如何用xmlstarlet命令行工具编辑XML文件

月夜之吻

月夜之吻

发布时间:2026-01-05 11:37:02

|

741人浏览过

|

来源于php中文网

原创

xmlstar 默认不修改原文件,需用 --inplace 或重定向;更新用 -u XPath -v 值,添加节点用 --subnode 或 --insert,删除用 --delete,批量处理需 shell 循环,注意编码、命名空间和 XPath 精确性。

如何用xmlstarlet命令行工具编辑xml文件

用 xmlstar 修改 XML 元素内容

xmlstar 默认不修改原文件,必须显式用 --inplace 或重定向输出。想把 old 改成 new,最常用的是 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。比如在每个 下追加一个 active

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 属性:

Mulan AI
Mulan AI

画布式AI视频创作平台,轻松制作爆款视频

下载
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 管道处理
实际编辑 XML 时,最易忽略的是 XPath 的上下文和命名空间。没声明 namespace 的 XML,用默认无前缀方式即可;但带 xmlns="http://example.com/ns" 的文件,必须先用 --net 注册前缀,否则所有 XPath 都不匹配。

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

601

2023.06.14

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

643

2023.06.21

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

463

2023.07.31

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

243

2023.08.01

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2871

2023.08.11

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

502

2023.08.11

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

308

2023.08.31

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

421

2023.09.01

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

1

2026.01.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.8万人学习

AngularJS教程
AngularJS教程

共24课时 | 2.3万人学习

CSS教程
CSS教程

共754课时 | 17.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号