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

如何使用xmlstarlet正确添加带指定属性的XML子节点

错误原因

命令中-v 'e="data3"'的作用是为新建的d节点设置文本内容,而非添加节点属性,因此生成的是带文本子节点的<d>e="data3"</d>结构,不符合预期。

修正后的命令

xmlstarlet 新增元素属性需要单独执行属性插入操作,可通过内置$prev变量指代上一步创建的节点,链式完成处理,无需多次读写文件:

xmlstarlet edit \
  --subnode "//a/b/c" -t elem -n d -v "" \
  --insert '$prev' -t attr -n e -v "data3" \
  input.xml

若需要使用管道写法,可参考:

cat input.xml | xmlstarlet edit \
  --subnode "//a/b/c" -t elem -n d -v "" \
  --insert '$prev' -t attr -n e -v "data3"
参数说明
  • 第一阶段--subnode操作:在匹配到的//a/b/c节点下创建名为d的元素,-v ""指定元素初始文本为空,避免生成多余文本节点
  • 第二阶段--insert操作:
    • '$prev'是xmlstarlet内置的特殊匹配规则,必须用单引号包裹,避免被shell提前解析为环境变量,该规则会自动匹配上一步操作刚创建的新节点
    • -t attr指定本次插入的内容类型为属性
    • -n e指定属性名为e
    • -v "data3"指定属性值为data3

执行后输出的XML结构如下,完全符合格式要求:

<a>
  <b>
    <c>
      <d e="data1"/>
      <d e="data2"/>
      <d e="data3"/>
    </c>
  </b>
</a>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:30:52