/ / XML Starlet Usuń niestandardowy węzeł XMl - xml, przetwarzanie tekstu, xmlstarlet

XML Starlet Usuń niestandardowy węzeł XMl - xml, przetwarzanie tekstu, xmlstarlet

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.

https://pastebin.com/sM7saneG

Chcę usunąć </video_preprocessors> <video_preprocessors> przed <timecode_burnin>

Dziękuję Ci bardzo.

Odpowiedzi:

0 dla odpowiedzi № 1

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