You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过终端命令将XML子标签<e>复制到上一级节点

用xmlstarlet实现XML子标签复制上移

要实现将每个<product>节点下<c>中的<e>标签复制一份到<b>之后,推荐使用专门的XML命令行工具xmlstarlet,避免用文本处理工具(如sed)因XML结构变化导致的匹配错误。

步骤1:安装xmlstarlet

  • Debian/Ubuntu系:
    sudo apt update && sudo apt install xmlstarlet
    
  • CentOS/RHEL系:
    sudo yum install xmlstarlet
    

步骤2:执行修改命令

直接修改原文件(谨慎操作)

xmlstarlet edit -L -P -S \
--match '/products/product' \
--insert './b' --type elem -n e -v './c/e/text()' \
input.xml

输出到新文件(保留原文件)

xmlstarlet edit -P -S \
--match '/products/product' \
--insert './b' --type elem -n e -v './c/e/text()' \
input.xml > output.xml

参数说明

  • -L:直接修改输入文件(省略则输出到终端)
  • -P:保留XML原有的缩进格式
  • -S:保留XML中的空格
  • --match '/products/product':匹配所有<product>节点
  • --insert './b':在当前<product>下的<b>元素之后插入新元素
  • --type elem -n e:指定插入的是名为e的元素节点
  • -v './c/e/text()':将新<e>元素的文本内容设为当前<product>下<c>/<e>的文本内容

验证效果

执行命令后,原输入XML会被修改为目标结构:

输入XML(示例):

<products>
  <product>
    <a>A content</a>
    <b>B content</b>
    <c>
      <d>d content</d>
      <e>e content</e>
    </c>
  </product>
</products>

转换后XML:

<products>
  <product>
    <a>A content</a>
    <b>B content</b>
    <e>e content</e>
    <c>
      <d>d content</d>
      <e>e content</e>
    </c>
  </product>
</products>

内容的提问来源于stack exchange,提问作者weby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:10:29