Zasadniczo mam wiele <video_preprocessors>
& </video_preprocessors>
w moim XML. Chcę usunąć pierwszy </video_preprocessors>
węzeł i drugi <video_preprocessors>
węzeł, jak mogę to osiągnąć?
</video_preprocessors>
<video_preprocessors>
<timecode_burnin>
<font_size>16</font_size>
<position>top_center</position>
<prefix/>
</timecode_burnin>
Było to wcześniej <timecode_burnin>
Oto pełny xml.
Chcę usunąć </video_preprocessors> <video_preprocessors>
przed <timecode_burnin>
Dziękuję Ci bardzo.
Odpowiedzi:
0 dla odpowiedzi № 1Analizując oczekiwany wynik / wynik, dochodzę do wniosku, że wymaga to 2 działań:
1) ruszaj się timecode_burnin
węzeł do poprzedniego węzła siostrzanego video_preprocessors
2) usuń "stary" video_preprocessors
węzeł, który początkowo zawierał timecode_burnin
węzeł
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
Powyższe polecenie wyświetli oczekiwany wynik.
Najważniejszy fragment po przetworzeniu:
...
<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>
...
Aby zmodyfikować plik w miejscu - dodaj globalny -L
opcja :
xmlstarlet ed -L -m ...