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

如何用XMLstarlet批量删除XML中各product下的重复Price标签?

解决XML中每个product节点下重复Price标签的删除问题

先看你的XML文档,每个product节点下都有两个重复的Price标签:

<products>
    <product>
        <Title>Name of product 1</Title>
        <SKU>00016</SKU>
        <Price>1.98</Price>
        <Stock>95</Stock>
        <Price>1.98</Price>
    </product>
        <product>
        <Title>Name of product 2</Title>
        <SKU>00017</SKU>
        <Price>2.15</Price>
        <Stock>45</Stock>
        <Price>2.15</Price>
    </product>
</products>

你之前用的命令只删除了第一个product下的重复标签,问题出在XPath的定位逻辑上:

xmlstarlet sel -t -c'//Price[1]' -n filename.xml > temp.txt && xmlstarlet ed -d '//Price[1]' filename.xml > tmp.xml && mv tmp.xml filename_corrected.xml

这里的//Price[1]是选取整个文档中第一个Price节点,不是每个product下的第一个,所以只会处理第一个product里的标签。

正确的命令

要删除每个product下的重复Price标签(保留第一个,删除后续重复项),用下面的命令:

xmlstarlet ed -d '//product/Price[position() > 1]' filename.xml > filename_corrected.xml

命令解释

  • //product/Price[position() > 1]:这个XPath会匹配每个product节点下位置大于1的Price标签,也就是每个product里的重复项。
  • -d:xmlstarlet的edit模式中,该参数表示删除匹配到的节点。
  • 直接将处理后的内容输出到filename_corrected.xml,不需要额外的临时文件操作。

如果你的每个product下固定只有两个Price标签,也可以用//product/Price[2]精准定位第二个标签,效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:10:47