XML Starlet删除自定义XMl节点

时间:2017-10-29 12:55:48

标签: xml text-processing xmlstarlet

基本上,我有多个<video_preprocessors>&amp;我的XML中的</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>

非常感谢。

1 个答案:

答案 0 :(得分:0)

分析您的预期输出/结果我得出结论,它需要2个动作:

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

2 )删除最初包含video_preprocessors节点的“旧” timecode_burnin节点

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 ...