У меня есть файл Test.xml со следующим содержанием.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright XXXXXX -->
<services>
<service>
<ServiceName>service1</ServiceName>
<ServiceId>100</ServiceId>
</service>
<service>
<ServiceName>service2</ServiceName>
<ServiceId>200</ServiceId>
</service>
<service>
<ServiceName>service3</ServiceName>
<ServiceId>300</ServiceId>
</service>
</services>
Исходя из названия службы, мне нужно удалить весь блок этой службы.
Предположим, что service1 - это имя, которое я получил в качестве входных данных, тогда следующий блок должен быть удален из xml.
<service>
<ServiceName>service1</ServiceName>
<ServiceId>100</ServiceId>
</service>
Я могу сделать это с помощью awk/sed/grep
. Но я должен использовать xmllint или другую утилиту для синтаксического анализа xml.
После исследования я мог закрыть выход, используя команду ниже. Но в выводе отсутствуют версия xml и родительские теги (службы).
xmllint --xpath "//services/service[ServiceName!='service1']" Test.xml