XML Starlet 删除自定义 XMl 节点

XML Starlet Delete custom XMl Node

基本上,我的 XML 中有多个 <video_preprocessors></video_preprocessors>。我想删除第一个</video_preprocessors>节点和第二个<video_preprocessors>节点如何实现?

</video_preprocessors>
      <video_preprocessors>
        <timecode_burnin>
          <font_size>16</font_size>
          <position>top_center</position>
          <prefix/>
        </timecode_burnin>

它位于 <timecode_burnin>

之前

这是完整的xml。

https://pastebin.com/sM7saneG

我想删除</video_preprocessors> <video_preprocessors>之前的<timecode_burnin>

非常感谢。

正在分析您的预期 output/result 我得出的结论是它需要 2 个操作:

1) 将timecode_burnin节点移动到上一个兄弟节点video_preprocessors

2)删除最初包含timecode_burnin节点的"old"video_preprocessors节点

xmlstarlet ed -m "//video_preprocessors/timecode_burnin" \
"//video_preprocessors/timecode_burnin/../preceding-sibling::video_preprocessors" \
-d "//video_preprocessors[timecode_burnin]/following-sibling::video_preprocessors" test.xml

以上命令会输出预期的结果。

处理后的关键片段:

...
<codec>h.264</codec>
      <video_preprocessors>
        <deinterlacer>
          <algorithm>interpolate</algorithm>
          <deinterlace_mode>Deinterlace</deinterlace_mode>
          <force>false</force>
        </deinterlacer>
        <timecode_burnin>
          <font_size>16</font_size>
          <position>top_center</position>
          <prefix/>
        </timecode_burnin>
      </video_preprocessors>
    </video_description>    
...

修改文件inplace - 添加全局-L选项:
xmlstarlet ed -L -m ...