Есть набор XML-документы в отдельных каталогах, каждый документ, как это:XMLStarlet удалить родительские элементы из нескольких документов рекурсивно
<xmldoc>
<data>data text</data>
<parent>
<descendent1>
<descendent2>motorcyclebaby.com?query</descendent2>
</descendent1>
</parent>
</xmldoc>
Я хочу удалить родительский элемент, который содержит «мотоцикл» в descendent2 во всех документы. До сих пор у меня есть это, который работает для одного док:
xmlstarlet ed -d "//parent[descendent1/descendent2[contains(text(),'motorcycle')]]" xmldoc.xml
Я попытался это удалить родительский элемент рекурсивно с находкой:
find . -name 'xmldoc.xml' -print0 | xmlstarlet ed -d "//parent[descendent1/descendent2[contains(text(),'motorcycle')]]" xmldoc.xml
но получил «не удалось загрузить внешний объект "xmldoc.xml"»
также попытался:
find . -name "xmldoc.xml" -exec xmlstarlet ed -d "//parent[descendent1/descendent2[contains(text(),'motorcycle')]]" xmldoc.xml {} +
Линия, которая работала в одном документе, возможно, не сработала. Если бы добавить --inplace: xmlstarlet ed --inplace -d "// parent [descendent1/descendent2 [contains (text(), 'motorcycle')]]" xmldoc.xml – motorbaby